排序

时间:2017-04-22 05:06:39

标签: java

我正在尝试对数组进行排序,但出于某种原因,它会在排序结果之前再次打印出来?

            int []arrayLoterry= new int[50];
            String output="";

            for(int i=0;i<arrayLoterry.length;i++){
                arrayLoterry[i]=(int) Math.floor(Math.random()*49)+i;
                output+=arrayLoterry[i]+" ";

                if(i%10==9){
                    output+="\n";
                }
            }
            System.out.println(output);

    /************WHERE IT STARTS SORTING****************************/

            int temp;
            for(int i=0;i<arrayLoterry.length;i++){
                for(int j=i+1;j<arrayLoterry.length;j++){
                    if(arrayLoterry[i]>arrayLoterry[j]){
                        temp= arrayLoterry[j];
                        arrayLoterry[j]=arrayLoterry[i];
                        arrayLoterry[i]=temp;
                    }
                }
            }
            System.out.println();
            for(int j=0;j<arrayLoterry.length;j++){
               output+=arrayLoterry[j]+" ";
               if(j%10==9){
                   output+="\n";
               }
            }

            System.out.println(output);

这给出了什么(由编辑简化):

5 3 2 1
7 9 4 0

5 3 2 1
7 9 4 0
0 1 2 3
4 5 7 9

为什么在我进行排序后再打印出来?

1 个答案:

答案 0 :(得分:3)

简单:

您不是直接打印阵列。您继续将要打印的内容添加到该字符串变量输出中以收集行。

您忘了重置该变量。换句话说:您将数据推送到输出,打印输出,添加更多行到输出;并再次打印。

更好的方法来做你想做的事:

  • 在每个循环之前创建 StringBuilder builder = new StringBuilder()
  • 在循环期间
  • 执行builder.append(whatever)
  • 循环后
  • ,执行System.out.println(builder.toString())

在这种情况下,对于字符串的连接更有效,并且它将每次循环“收集”输出一次