我的老师为我们分配了一个制作程序的迷你项目,该程序可以找到任何用户输入数字的所有因素。我正在使用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,以查看是否有与我的问题相关的问题,并且从我发现的内容来看,以前没有提到过。如果有人指出我认为是逻辑错误,我将不胜感激。
答案 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);
}
}