任务挑战:
1.编制一个Java application应用程序,把数组中已知的10个数字由小到大排序后输出。
- 编程前思考:
完成数组排序的方法有多种,其中有调用Arrays类中的sort方法直接对数组进行由小到大的排序,还可以采用冒泡排序法对数组进行排序以及直接选择排序的方法等。 - 代码部分:
import java.util.Arrays; //导入java.uril.Arrays类
public class task1_1challenge{ //创建类public static void main(String args[]){ //主方法int arr[]=new int[]{12,42,32,15,63,75,95,14,55,87}; //定义数组arr并赋值Arrays.sort(arr); //调用Arrays对象的方法sort将数组arr排序System.out.println("使用sort方法将数组数字由小到大排序为:");//输出一段文字for(int i=0;i<arr.length;i++){ //for循环遍历数组System.out.print(arr[i]+" "); //输出数组元素}System.out.println(); //换行System.out.println("---end---"); //task1_1challenge sorter1=new task1_1challenge(); //创建冒泡排序类的对象sorter1sorter1.sort1(arr); //调用sorter1中的方法sort1task1_1challenge sorter2=new task1_1challenge(); //创建直接排序类的对象sorter2sorter2.sort2(arr); //调用sorter2中的方法sort2}public void sort1(int arr[]){ //创建方法sort1for(int i=1;i<arr.length;i++){ //控制排序轮数,为数组长度减1次for(int j=0;j<arr.length-i;j++){ //比较大小循环体if(arr[j]>arr[j+1]){ //判断相邻两个元素大小int temp=arr[j]; //把第一个元素值保存到临时变量中arr[j]=arr[j+1]; //把第二个元素值保存到第一个元素中arr[j+1]=temp; //把临时变量保存到第二个元素中}}}showArray1(arr); //调用方法showArray1}public void showArray1(int arr[]){ //创建方法showArray1遍历数组System.out.println("使用冒泡排序法输出:"); //输出一段文字for(int i:arr){ //foreach语句遍历数组System.out.print(i+" "); //输出数组元素}System.out.println(); //换行System.out.println("---end---");}public void sort2(int arr[]){ //创建方法sort2int index; //定义数组的元素下标indexfor(int i=1;i<arr.length;i++){ //循环位置交换的轮数index=0; //给index下标赋值for(int j=1;j<=arr.length-i;j++){ //比较大小的循环体if(arr[j]>arr[index]){ //判断当前元素与循环比较元素的大小关系index=j; //如果循环比较元素大于当前元素,则将循环元素下标赋予当前元素下标} }int temp=arr[arr.length-i]; //将当前轮数的最后一个值保存到临时变量temp中arr[arr.length-i]=arr[index]; //将这一轮最大数赋予这一轮最后一个位置arr[index]=temp; //临时变量保存在index下标的数组元素中}showArray2(arr); //调用showArray2方法对arr进行输出}public void showArray2(int arr[]){ //创建方法showArray2System.out.println("使用直接选择排序法输出:"); //输出一段文字for (int i:arr){ //foreach遍历arr数组System.out.print(i+" "); //输出数组元素}System.out.println();System.out.println("---end---");}
}
- 运行结果:
- 结果分析:
三种方法结果相同,冒泡排序的主要思想就是把相邻两个元素进行比较,如果满足一定条件则进行交换,每次循环都将最大或者最小的元素排在最后,下一次是对数组中其他元素进行类似操作。而直接选择排序的基本思想是将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,与冒泡排序相比,直接选择排序的交换次数要少很多,所以速度会更快些。需要注意的是数组的下标是从0开始,最后一个元素的表示总是“数组名.length-1”。
2.编制一个Java application应用程序,求3x^2+4x-1=0的根。
- 编程前思考:
这是一个一元二次方程,可以通过求根公式算出结果,如果是别的一元二次方程的话是否可以通过定义a,b,c的值来进行求解。 - 代码部分:
import java.util.Scanner; //导入类
public class task1_1challenge1{ //创建类public static void main(String[] args){ //创建main方法{double a=3,b=4,c=-1; //在语句块中定义double类型变量a,b,cdouble x1=(-b+Math.sqrt(b*b-4*a*c))/(2*a); //定义double类型根x1并用求根公式赋予值double x2=(-b-Math.sqrt(b*b-4*a*c))/(2*a); //同上System.out.println("方程的根为:"+x1); //输出根x1System.out.println("方程的根为:"+x2); //输出根x2}{double a,b,c; //定义double型变量a,b,cwhile(true){ //while循环,使得能够多次求不同方程的根System.out.println("请输入a:"); //输出一段文字Scanner sc1=new Scanner(System.in); //创建一个扫描器用来输入数据a=sc1.nextDouble(); //把输入的值赋给aSystem.out.println("请输入b:");Scanner sc2=new Scanner(System.in); //创建一个扫描器用来输入数据b=sc2.nextDouble(); //把输入的值赋给bSystem.out.println("请输入c:");Scanner sc3=new Scanner(System.in); 创建一个扫描器用来输入数据c=sc3.nextDouble(); //把输入的值赋给bif(b*b-4*a*c<0){ //如果不符合判别式,则无解System.out.println("该方程无解");}else{double x1=(-b+Math.sqrt(b*b-4*a*c))/(2*a);//根据求根公式求解double x2=(-b-Math.sqrt(b*b-4*a*c))/(2*a);System.out.println("方程的根为:"+x1); //输出结果System.out.println("方程的根为:"+x2);}}}}
}
- 运行结果: