试图让用户按Enter键以生成下一个素数

时间:2016-02-24 20:03:59

标签: java

我试图让用户按Enter键以生成下一个素数。在用户生成了他们需要的素数之后,他们将输入0以便程序结束。目前,该程序只是吐出所有数字,直到它达到极限,我需要它只在用户按Enter键时打印一个数字,或者在输入0时结束。

public static void main(String[] args)  { 
    Scanner input = new Scanner(System.in);
    while(!input.hasNextInt(0));    
        for(int i=2; i<=1000; i++){ 
            for(int j=2; j<=i; j++){ 
                if(j==i){
                    System.out.println(i);
                }
                if(i%j==0){
                    break;
                } 
            } 
        } 
    } 
}

3 个答案:

答案 0 :(得分:1)

在&#39; while(!input.hasNextInt(0))&#39;之后删除分号。并尝试从那里调试。该分号使while循环无效。而是用开口支架替换它:

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    while(!input.hasNextInt() && !(input.nextInt() == 0)) {    
        for(int i=2; i<=1000; i++){ 
            for(int j=2; j<=i; j++){ 
                if(j==i){
                    System.out.println(i);
                }
                if(i%j==0){
                    break;
                } 
            } 
        } 
    }
    input.close();
}

此外,最佳做法是在不再需要时关闭资源(扫描程序)。

答案 1 :(得分:0)

input.hasNextInt不检查输入的值是否为0.为此,您需要 -

while (input.nextInt() != 0) { ... }

- 除了您要进行多次检查,因此您要保存下一个输入。也许像是

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

    System.out.println("First scan: ");
    String next = scanner.nextLine();
    while (!("0".equals(next))) {
        if (next.isEmpty()) {
            System.out.println("Next prime");
        } else {
            System.out.println("String: " + next);
        }
        System.out.println("Next scan: ");
        next = scanner.nextLine();
    }

    System.out.println("Done");
    scanner.close();
}

这是一个我掀起的快速测试。我们现在循环,只要下一个输入变量不是0. scanner即使用户输入一个空行(换句话说,如果他们只是输入),scan.nextLine()将提交。

答案 2 :(得分:0)

问题是你的外部for循环在下一个while循环检查之前完全从2到1000迭代。当您尝试使用if(i%j==0)打破for循环时,您只是打破了if

这是一个修订版本,可以运行并展示我的意思。请注意,我还会按照其他答案的建议更好地使用表格:关闭扫描仪,不要使用.hasNextInt(int)

try (Scanner scanner = new Scanner(System.in)) {
    for (int i = 2; i <= 1000; i++) {
        String next = scanner.nextLine();
        if(next.equals("0")){
            return;
        }else{
            for(int j = 2;j<=i;j++){
                if(j==i){
                    System.out.println(j);
                }else if(i%j==0){//if j is divisible by i...
                    i++;         //try the next i, so we don't print a blank line
                    j=2;         //and reset j
                }
            }
        }
    }
}