【发布时间】:2026-02-13 00:20:04
【问题描述】:
这是我的第一篇文章,所以如果我写了一些愚蠢的东西请踩我。
我刚开始上 IT 课,今天在“while”循环课上,我的导师给了我们以下作业:
编写一个程序,它读取一个自然数 n,并在一个图形框中显示它在区间 [2; 中的所有除数; n-1]。
到目前为止,我想出了一个有效的代码,但结果有点错误:
import java.util.Arrays;
import javax.swing.JOptionPane;
public class Divisors {
public static void main(String[] args) {
String n = JOptionPane.showInputDialog(null, "Enter a natural number");
Integer i = Integer.parseInt(n);
int d = i - 1;
int x = 2;
int[] dvr = new int[i]; // [i] because bigger numbers need more iterations
while (x >= 2 && x <= d) {
double y = i % x;
if (y == 0) {
dvr[x] = x;
x = x + 1;
} else {
x = x + 1;
}
}
JOptionPane.showMessageDialog(null, "The divisors of " + i + " are:\n" + Arrays.toString(dvr));
}
}
问题是循环用很多零填充数组,并且导师结果的屏幕截图显示了一个仅列出除数的窗口。
我尝试使用 ArrayList 来做到这一点,但这对我来说现在是黑魔法,而且我的导师还没有教我们如何使用我代码中使用的东西之外的任何东西。
非常感谢任何帮助。
【问题讨论】:
-
实际上,数组在创建时被初始化为全零,您的循环不会用零填充它。
-
你的问题在于 dvr[x] = x;您不想在位置 x 处设置除数的值。您需要第二个变量来索引到您的数组,您只在添加每个除数后递增。
-
@bhspencer 但我在数组中仍有预定数量的插槽
-
@azurefrog 抱歉,我知道,打错了。但是有没有办法只显示除数?除了将它们保存在数组中并保存到 showMessageDialog 中之外,我想不出任何更好的方法...
-
it's my first post so DO stomp me if I wrote something stupid.实际上,看到一个包含mvce 和具体问题描述的问题令人耳目一新。
标签: java arrays while-loop joptionpane