任务挑战:
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(); //创建冒泡排序类的对象sorter1
sorter1.sort1(arr); //调用sorter1中的方法sort1
task1_1challenge sorter2=new task1_1challenge(); //创建直接排序类的对象sorter2
sorter2.sort2(arr); //调用sorter2中的方法sort2
}
public void sort1(int arr[]){ //创建方法sort1
for(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[]){ //创建方法sort2
int index; //定义数组的元素下标index
for(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[]){ //创建方法showArray2
System.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,c
double 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); //输出根x1
System.out.println("方程的根为:"+x2); //输出根x2
}
{
double a,b,c; //定义double型变量a,b,c
while(true){ //while循环,使得能够多次求不同方程的根
System.out.println("请输入a:"); //输出一段文字
Scanner sc1=new Scanner(System.in); //创建一个扫描器用来输入数据
a=sc1.nextDouble(); //把输入的值赋给a
System.out.println("请输入b:");
Scanner sc2=new Scanner(System.in); //创建一个扫描器用来输入数据
b=sc2.nextDouble(); //把输入的值赋给b
System.out.println("请输入c:");
Scanner sc3=new Scanner(System.in); 创建一个扫描器用来输入数据
c=sc3.nextDouble(); //把输入的值赋给b
if(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);
}
}
}
}
}
- 运行结果: