Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 While循环不会使用用户的新输入循环回起始位置_Java_Loops_While Loop - Fatal编程技术网

Java While循环不会使用用户的新输入循环回起始位置

Java While循环不会使用用户的新输入循环回起始位置,java,loops,while-loop,Java,Loops,While Loop,我一直在努力完善我自己的程序,我只是看不出我做错了什么。这个项目的目的就是做这些事情 1) 询问用户电话号码 2) 如果数字为正数,请打印出数字 3) 如果数字也是素数,请打印它也是素数 4) 继续执行上述操作,直到用户输入负数为止 问题是,程序只在开始时工作并确定输入的数字是否为素数。之后,当用户被要求输入另一个数字(如果大于0)时,程序就不会返回到开头来确定该数字是否为素数。相反,它只是坚持最初确定的值(prime或not prime),并打印出与第一个值(第二个值)相同的语句。我希望它每次

我一直在努力完善我自己的程序,我只是看不出我做错了什么。这个项目的目的就是做这些事情

1) 询问用户电话号码

2) 如果数字为正数,请打印出数字

3) 如果数字也是素数,请打印它也是素数

4) 继续执行上述操作,直到用户输入负数为止

问题是,程序只在开始时工作并确定输入的数字是否为素数。之后,当用户被要求输入另一个数字(如果大于0)时,程序就不会返回到开头来确定该数字是否为素数。相反,它只是坚持最初确定的值(prime或not prime),并打印出与第一个值(第二个值)相同的语句。我希望它每次都重新评估这个值,看看这个数字是否为素数,直到用户输入一个负数。 这是我第一年攻读C.S学位。我觉得编程真的很有趣,也很有挑战性。但我接受了这一挑战,并在每次解决这些问题时都能找到一种成就感

import java.util.Scanner;

public class Prime3 {

    public static void main(String[] args) {
        int userNum;
        int i = 2;
        boolean isPrime = true;
        Scanner input = new Scanner(System.in);

        // Ask user for initial number
        System.out.println("Please enter a number.");
        userNum = input.nextInt();

        // Determining whether or not number entered is prime
        while (i <= userNum/2) {
            System.out.println("Checking if " + i + " is a multiple of n");
            if (userNum%i == 0) {
                System.out.println(i + " is a multiple of " + userNum);
                isPrime = false;
                break;
                }
            i++;
            }
        // Print out user number if the number is positive. 
        while (userNum > 0) {
            System.out.println("You entered the number, "  + userNum);
            if (isPrime) { // If it's a prime, state that it's a prime
            System.out.println("No even multiples found. " + userNum + " is a prime number");
            }
            userNum = input.nextInt();
        }
        System.out.println("Invalid input. Program now ending.");
        System.exit(0);
    }
}
import java.util.Scanner;
公共类素数3{
公共静态void main(字符串[]args){
int userNum;
int i=2;
布尔值isPrime=true;
扫描仪输入=新扫描仪(System.in);
//询问用户初始编号
System.out.println(“请输入一个数字”);
userNum=input.nextInt();
//确定输入的数字是否为素数
而(i 0){
System.out.println(“您输入的数字,+userNum”);
如果(isPrime){//如果它是素数,说明它是素数
System.out.println(“找不到偶数倍。”+userNum+“是一个素数”);
}
userNum=input.nextInt();
}
System.out.println(“无效输入。程序现在结束。”);
系统出口(0);
}
}

通常,此代码的构造容易出错。你应该这样做:

  • 设置userNum=0
  • 输入while(userNum>=0)
  • 调用方法,检查userNum是否为正,如果为是,则打印
  • 调用方法,检查userNum是否为prime,如果为yes,则打印
  • 将新值从输入控制台获取到userNum中
  • 环的末端主体

  • 如果你照我说的做,应该没有问题。

    好吧,我明白了。您应该将
    while(userNum>0)
    移到顶部。因此,您的最终代码应该如下所示:

    public class Prime3 {
    
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        // Ask user for initial number
        System.out.println("Please enter a number.");
        int userNum = input.nextInt();
    
        while (userNum > 0) {
            int i = 2;
            boolean isPrime = true;
    
    
            // Determining whether or not number entered is prime
            while (i <= userNum / 2) {
                System.out.println("Checking if " + i + " is a multiple of n");
                if (userNum % i == 0) {
                    System.out.println(i + " is a multiple of " + userNum);
                    isPrime = false;
                    break;
                }
                i++;
            }
            // Print out user number if the number is positive. 
    
            System.out.println("You entered the number, " + userNum);
            if (isPrime) { // If it's a prime, state that it's a prime
                System.out.println("No even multiples found. " + userNum + " is a prime number");
            }
            userNum = input.nextInt();
        }
        System.out.println("Invalid input. Program now ending.");
        System.exit(0);
    }
    
    公共类Prime3{
    公共静态void main(字符串[]args){
    扫描仪输入=新扫描仪(System.in);
    //询问用户初始编号
    System.out.println(“请输入一个数字”);
    int userNum=input.nextInt();
    while(userNum>0){
    int i=2;
    布尔值isPrime=true;
    //确定输入的数字是否为素数
    
    虽然(我是的……我能理解。我只是一个初学者。谢谢你的输入。是的!正是我想要的。这是我试图做的,但它把我和里面的第二个while循环搞混了。它对我来说太乱了。谢谢你为我澄清这一点并帮助一个兄弟。再次感谢!只是澄清一下,你能告诉我是什么吗我的第一个代码是错误的。因为我的代码不是在第二个while循环中说的,如果数字是正数,就打印出来。如果数字(isPrime),然后声明其素数?然后用另一个用户输入重复此操作?是的,它这样说,但它只是重复代码的这一部分。它不检查一个新数字是否为素数,它只是使用从第一个数字中获得的值。在这种情况下,变量isPrime永远不会更改值,因为它的值是在fi中分配的rst while循环,只有在第一次输入后才能访问。明白了!我真的很感激!