程序使用for循环查找数量因子

时间:2018-11-14 18:59:32

标签: java

我的老师为我们分配了一个制作程序的迷你项目,该程序可以找到任何用户输入数字的所有因素。我正在使用for循环来这样做,但是for循环失败了,我不知道为什么。

以下是相关代码:

System.out.println("Type a number");
Scanner num = new Scanner(System.in);

for (double number = 1; num.nextDouble() % number == 0; number++) {
    if (num.nextDouble() % number != 0)
        continue;

    if (number > num.nextDouble()) 
        break;

    System.out.println(number + "is a factor of " + num);
}

我查看了Stack Overflow,以查看是否有与我的问题相关的问题,并且从我发现的内容来看,以前没有提到过。如果有人指出我认为是逻辑错误,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

您的代码问题包括但不限于:

  • 它读取输入,通常将数字作为double处理。谈论非整合因素并没有多大意义。而是使用Scanner.nextInt()Scanner.nextLong(),并通过相应的整数数据类型处理所有数字。

  • 每当它要检查确定其因素的数字时,它都会从输入中读取一个 new 数字。而是在循环之前或其初始化子句中读取输入一次。将结果存储在变量中,然后从那里访问它。

  • 循环条件不合适。如果number精确地划分了输入数字(取决于类型double的数字精度),它将终止循环,而不打印任何内容。而是循环直到number超过适当的阈值(例如输入数字的值)。

  • 最后,它打印Scanner的字符串值,这意味着要打印被分解的数字的值。而是打印为保留数字而建立的变量。

答案 1 :(得分:0)

您的问题是,您试图将用户输入与变量进行比较,但是您在for循环的声明中获取了用户输入,因此自执行每次循环以来,它都等待nextDouble它将检查每个循环中num.nextDouble() % number == 0是否为true

您的代码显示为'stuck',但实际上它只是在等待您输入另一个数字。

代码中的实现

在下面的示例中,我将nextDouble放在for循环之前,因此它将仅等待用户输入一次。

double userInput = num.nextDouble();
for (double number = 1; userInput % number == 0; number++) {

}

您在代码中做了几次,这是使用代码的完整示例:

System.out.println("Type a number");
Scanner num = new Scanner(System.in);
double userInput = num.nextDouble();
for (double number = 1; userInput % number == 0; number++) {
    if (userInput % number != 0) {
        continue;
    }

    if (number > userInput) {
        break;
    }

    System.out.println(number + "is a factor of " + userInput);
}

替代

但是,由于实际上您似乎并没有使用double做任何事情,并且因为您的for循环可以更简单,所以这也可以完成工作:

int userInput = num.nextInt();

for (int number = 1; number < userInput; number++) {
    if (userInput % number == 0) {
        System.out.println(number + " is a factor of " + userInput);
    }
}