排序数组有两个循环实现

时间:2014-10-23 16:54:31

标签: java arrays sorting

我是Java新手。 我尝试做我的任务之一,但我无法弄清楚为什么我的结果仍然无法排序。

我有一个提示值(参数)20 10 30 60 55,我想对它进行排序。 我写了两个循环,并将提示值(字符串)转换为Integer。

结果:(未分类)

  

20   10   三十   60   55   线程" main"中的例外情况java.lang.ArrayIndexOutOfBoundsException:5       在question2.SortedArray.main(SortedArray.java:29)

这是我写的代码:

int temp = 0;
    int array[] = null;
    int array2[];


    for(int i=0; i<args.length; i++){
        int a = Integer.parseInt(args[i]);
         array = new int[a];
        for(int j=0; j<args.length; j++){
            int b = Integer.parseInt(args[i]);
            array2 = new int[b];
            if(array[i]>array2[j])
                temp = array2[j];
                array2[j] = array[i];
                array[i] = temp;


        }
    }
    for (int i = 0; i < array.length; i++)
    {
              System.out.println(args[i].toString());
    }

我可以理解这个代码我可以在线下面

int tempVar;
        for (int i = 0; i < numbers.length; i++)
        {
                 for(int j = 0; j < numbers.length; j++)
                 {
                         if(numbers[i] > numbers[j])
                         {
                         tempVar = numbers [j ];
                         numbers [j]= numbers [i];
                         numbers [i] = tempVar;
                         }
                 }
        }
        for (int i = 0; i < numbers.length; i++)
        {
                  System.out.print(numbers[i]+" ");
        }

}

3 个答案:

答案 0 :(得分:4)

首先,将String args数组转换为int数组值。然后排序并显示values。你一直在排序数组(按数组int值调整大小),然后打印参数(你没有排序)。所以,像

int[] values = new int[args.length];
for (int i = 0; i < args.length; i++) {
    values[i] = Integer.parseInt(args[i]);
}
int temp = 0;
for (int i = 0; i < values.length - 1; i++) {
    for (int j = i + 1; j < values.length; j++) {
        if (values[i] > values[j]) {
            temp = values[j];
            values[j] = values[i];
            values[i] = temp;
        }
    }
}
System.out.println(Arrays.toString(values));

答案 1 :(得分:1)

首先获取数组的整数。

 int[] yourArray = { 20, 10, 30, 60, 55 };
        for (int i = 0; i < yourArray.length; i++) {
            for (int j = 0; j < yourArray.length - 1; j++) {
                // swap
                if (yourArray[i] < yourArray[j]) {
                    int temp = yourArray[i];
                    yourArray[i] = yourArray[j];
                    yourArray[j] = temp;
                }
            }
        }
        for (int i : yourArray)
            System.out.println(i);

<强>输出

10 20 三十 55 60

答案 2 :(得分:1)

您需要初始化数组以保存提示值

int [] yourArray = {2,3,4 5,};

您不需要第二个数组来将值排序为临时int以保存正在移动的值。

下面的语句如果需要用{}括起来,否则所有它将会运行到第一个分号然后退出if。

基本上你在第二部分粘贴的代码是检查值i的元素是否大于元素j的值。如果值更大,则将j与i交换。

for (int i = 0; i < numbers.length; i++)


  {
             for(int j = 0; j < numbers.length; j++)
             {
                     if(numbers[i] > numbers[j]) //if element at i is greater than element a j
                     {
                     tempVar = numbers [j ]; //store the number at element j in temp
                     numbers [j]= numbers [i];// set the number at element i to element j
                     numbers [i] = tempVar;// set the number at temp to element 
                     }
             } // does this for each element until no element i greater than j
    }