【问题标题】:shuffling numbers in array [duplicate]改组数组中的数字[重复]
【发布时间】:2016-12-15 18:07:27
【问题描述】:
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

【问题讨论】:

  • 您永远不会在数组中放置任何值。你只是在交换一堆0.0 doubles。
  • 你使用Scanner对象input(创建10次)甚至一次吗? int类型的默认值为0
  • 您能否向我们提供除方法及其输出之外的更多信息?
  • @LukeMelaia 标题确实不言自明,正文提供了更多上下文(但是是的,我同意更多信息会很有用)

标签: java swap


【解决方案1】:

双精度数和整数初始化为 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 开始循环,所以您错过了一些值

【讨论】:

【解决方案2】:

如果你想真正滑动值,那么循环应该如下所示

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;
}

【讨论】:

    猜你喜欢
    • 2014-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 2013-12-20
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多