gpt4 book ai didi

java - 一个数的除数列表

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:29 28 4
gpt4 key购买 nike

这是我的第一篇文章,所以如果我写了一些愚蠢的东西,不要踩我。

我刚开始上 IT 课,今天在“while”循环课上,我的导师给了我们以下作业:

Write a program which reads a natural number n and displays in one graphical box all its divisors from the interval [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));
}
}

问题是循环用很多零填充了数组,tutor 结果的屏幕截图显示了一个仅列出除数的窗口。

我尝试用 ArrayList 来做到这一点,但现在这对我来说是黑魔法而且我的导师还没有教我们如何使用我的代码中使用的东西之外的任何东西。

非常感谢任何帮助。

最佳答案

您遇到的主要问题是您将要打印未知数量的值,但您使用数组来存储它们,并且数组具有固定大小。由于您有一个 int 数组,它将完全填充默认值零。

理想情况下,您只打印数组的第一组非零值,但您存储的是分散在整个数组中的除数。

dvr[x] = x; 将每个值存储在该值的索引处,而实际上您应该将每个新值存储到数组中的下一个空位。

创建一个单独的索引变量,并使用它存储每个值:

    int index = 0;
while (x >= 2 && x <= d) {
...
if (y == 0) {
dvr[index++] = x;
...

然后当您的主循环完成时,您可以创建一个新的“显示数组”,它只包含除数,而不包含零。此时,index 会准确告诉您它需要多大:

    int[] display = Arrays.copyOf(dvr, index);
JOptionPane.showMessageDialog(null, "The divisors of " + i + " are:\n" + Arrays.toString(display));

关于java - 一个数的除数列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33088097/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com