刚开始学习编程,今天刚看到JAVA入门中的数组排序问题,看完后就想动手写一个小程序,检验和巩固自己刚刚所学的知识。现在写下一点点心得。
题目是 这样的:任意输入几个整数,将这些整数按照从小到大排列输出。
拿到一个题目,我们要思考要得到这个结果就要解决哪些问题?
第一:如何实现将输入的数据存入到一个数组?
第二:如何将数组中的数据进行排序?
第三:如何将数组中已排序好的数据输出打印
我们来一一解决这些问题:
首先第一个问题,如何实现数据输入数组?
在JAVA中,一个数组的宣告方式是 int[]arr=new int[x];或者是int[]arr={1,2,3,4}'。我们想实现数据输入数组中并储存起来,那么第二种给定数组中元素的值这种方式是肯定不行的,那么考虑第一种方法。int[]arr=new int[num]是用来宣告arr数组中的元素个数,我们不知道自己会输入几个数据,那么这个num就是个未知数,想想,我们是否可以通过输入来给定这个num呢?
Scanner input=new Scanner(System.in);
int num=input.nextInt();
int[]arr=new int[num];
解决了元素个数的问题,再来解决输入的数据存入数组中。数组中的元素存入是对号入座的,一个位置存入一个元素,输入的第一个数据就存入0号位置,输入的第二个数据就存入1号位置。这个输入和存入的过程是重复的,也可以用一个循环过程。
System.out.println("请输入:");
for(int i=0;i<arr.length;i++)
{
arr[i]= input.nextInt();
}
第二个问题,如何将数组中的数据进行排序?
对数组进行排序,就是讲数组中的数据进行一一比较,比如从小到大排序,就是将0号位的元素和1号位的元素进行比较,如果0号位元素小于1号位元素,就不用互换,如果大于,那么两个位置的元素的值就要互换,然后1号位元素和2号位元素进行比较,比较后的处理同上所述。在最后我们会发现,在这一个系列的比较中,最后位置上的元素的值是最大的,自此,我们就排出了最大值。继续排,那么继续上述的步骤我们可以排出第二大的元素值,并将其安放在了倒数第二的位置上。在这里步骤是相同的,我们可以用一个循环来完成上述过程。
public static void minTomax(int[]arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y=0;y<arr.length-x-1;y++)
{
if(arr[y]>arr[y+1])
{
int tap=arr[y];
arr[y]=arr[y+1];
arr[y+1]=tap;
}
}
}
}
x是循环的次数,y是元素位置。完成循环后,arr数组完成了从小到大的排序了。
再来解决第三个问题,将数组中已排序好的数据输出打印在命令行中。
是不是直接用 System.out.println(arr);刚开始我就是用这种方法,结果输出的不是数据,而是一串符号,这串符号代表的是这个数组所储存的地址,arr只是数组的名称,而不是代表数据类型的变量。将数组中的数据输出打印也是要一个一个的输出打印的(这也是摸索了半天,网上看了些别人的方法才知道的)。也就是用到循环语句:
public static void printArray(int[]arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
循环完成,数组中的数据也就一一显示了。
至此,我们解决了这三个问题,那么,将整个过程衔接起来,就可以实现排序输出了。
另外,还可以使用java.util套件中的Arrays类别中的方法来直接进行排序。Arrays.sort(数组名);
完成这个题目,让我更加的理解for循环的使用和如何将一个问题分解为若干个小的问题去解决的思考方式。获益颇多,多多练习,多多思考,将学到的东西及时消化使用,才能学好。加油!!