Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成随机数,但有几个小错误_Java - Fatal编程技术网

Java 生成随机数,但有几个小错误

Java 生成随机数,但有几个小错误,java,Java,我确实看过与随机数相关的线程,并将它们应用到本作业中,但我有两个问题 1) 我需要我的程序生成随机数(并打印它们)并计算迭代次数。我已经开始倒计时了,但是我不知道为什么随机数没有打印出来。这与我的猜测=0有关吗?如果我不清楚,这里有一个例子 Example: Enter a number: 13 85 89 73 94 13 This took 5 tries 2) 我不知道为什么我的程序总是以一个数字作为答案。输入数字86后,程序立即结束 import java.util.*; pub

我确实看过与随机数相关的线程,并将它们应用到本作业中,但我有两个问题

1) 我需要我的程序生成随机数(并打印它们)并计算迭代次数。我已经开始倒计时了,但是我不知道为什么随机数没有打印出来。这与我的猜测=0有关吗?如果我不清楚,这里有一个例子

Example: 
Enter a number: 13
85
89
73
94
13
This took 5 tries
2) 我不知道为什么我的程序总是以一个数字作为答案。输入数字86后,程序立即结束

import java.util.*; 

public class FeelingLucky { 
    public static void main (String [] args) { 
        Scanner sc = new Scanner (System.in); 

        int tries = 0; 
        int guess = 0;

        Random random = new Random(1); 
        int num = random.nextInt(100) + 1; 

        System.out.print("Pick a number between 1 and 100:"); 

        while (guess != num) { 
            guess = sc.nextInt(); 
            tries++; 
        }
        System.out.println("It took " + tries + " tries to match"); 
        sc.close();
    }
}
Random(1)
在构造函数中使用始终相同的种子。只需使用
Random()
-无参数构造函数

import java.util.*;

public class FeelingLucky {
public static void main(String[] args) {

    Scanner sc = new Scanner(System.in);

    int tries = 0;
    int guess = 0;

    Random random = new Random(); // No seed
    int num = random.nextInt(100) + 1;

    System.out.print("Pick a number between 1 and 100:");

    while (guess != num) {
        guess = sc.nextInt();
        tries++;
    }
    System.out.println("It took " + tries + " tries to match");
    sc.close();

}
}


请参见您只调用了
随机对象上的
nextInt()
一次,因此您只生成了一个随机数。在循环内部,您在扫描仪上调用
nextInt()
,扫描仪正在读取System.in,因此您的程序正在停止,等待用户每次在循环中再次输入一个数字

如果希望用户只输入一个数字一次,然后随机生成一个数字,直到匹配为止,则需要交换在循环中调用的数字。要打印生成的随机数,需要在打印当前数字的循环中添加一条打印语句

while (guess != num) {
    num = random.nextInt(100) + 1;
    guess = sc.nextInt();
    System.out.printf("you guessed: %d the number was %d%n",guess, num);

    tries++;
}

每次都会打印出来,每次都会猜出一个新的随机数

因为你用(1)为你的随机数播种,你总是得到相同的数字序列。你需要打印出数字才能打印出来。ie System.out.println(“随机数为:“+num”);您的描述令人困惑,是程序猜到了用户输入的数字,还是用户猜到了程序生成的数字?@matt即使我打印它们,结果也是一样的。如果用户猜到了数字,您的程序就无法正常工作。它总是在86处“停止”的原因是86是生成的数字。你猜到数字了-节目结束了。为什么它总是生成这个数字在其他注释和answers@MiloBem哦,糟糕。用户应该猜测程序生成的数字,然后打印出一组随机数,直到得到结果。问题是这是一个学校作业,我没有发言权,因为教授希望它的种子值为1。不管怎样,谢谢。种子实际上是一种每次都能得到相同数字序列的方法(一种随机的初始设置),所以这不是一个问题,而是一种设计。