在阵列中洗牌

时间:2016-12-15 18:07:28

标签: java swap

package test;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        double[] myList=new double[10];
        System.out.println("enter values");
        for (int i = 1; i < myList.length; i++) {
            java.util.Scanner input=new java.util.Scanner(System.in);
            int j = (int)Math.random() * myList.length;
            double tmp=myList[j];
            myList[i]=myList[j];
            myList[j]=tmp;
            System.out.println(tmp);    
        }
    }
}

为什么打印0.0

2 个答案:

答案 0 :(得分:0)

双精度和整数初始化为0,因此你的数组实际上是10个零。

你需要做一些事情:

double[] myList=new double[10];
System.out.println("enter values");
java.util.Scanner input=new java.util.Scanner(System.in);
for (int i = 0; i < myList.length; i++) {
    myList[i] = input.nextDouble();// get input from user and put it into array
}
//and then we swap
for (int i = 0; i < myList.length; i++) {
    int j = (int)Math.random() * myList.length;
    double tmp=myList[j];
    myList[i]=myList[j];
    myList[j]=tmp;
}
System.out.println(tmp);  

有一些问题:

  1. 您的Scanner根本没有被使用,而且您创建了10次(因为它在循环中)
  2. 您没有初始化数组,因此所有值均为0.0

  3. 您开始在索引1处循环,因此您错过了一些值

答案 1 :(得分:0)

如果你想真正滑动值而不是循环应该如下

for (int i = 0; i < myList.length; i++) {
    int j = (int)Math.random() * myList.length;
    double tmp=myList[i];
    myList[i]=myList[j];
    myList[j]=tmp;
}