- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
这是我的第一篇文章,所以如果我写了一些愚蠢的东西,不要踩我。
我刚开始上 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/
我遇到了一个问题,想要了解更多信息以及如何避免。我有这个代码 len :: (Num r ) => [a] -> r len [] = 0 len xs = 1 + len ( tail xs ) a
我知道如何找到给定整数(1 除外)的除数: let smallest_divisor n = let rec aux n i = if i 编辑添加:在平均情况下,第二种方法
这个问题已经有答案了: Why does integer division code give the wrong answer? [duplicate] (4 个回答) 已关闭去年。 在 Java
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_26). scala> 1.0 / Doub
我的数据帧结构如下,x_L 和 x_R 对的数量可能最多为 100。 ID Side A_L A_R B_L B_R 1 0 7 5 6 3 2
我的数据帧结构如下,x_L 和 x_R 对的数量可能最多为 100。 ID Side A_L A_R B_L B_R 1 0 7 5 6 3 2
如何使用转换将数字列表除以 2?我以为这段代码可以做到,但它只将整个列表的数字 1 除以 2,所以我一定完全误解了这一点。有人能帮助我吗? :) list v(5, 1); list d; d.res
我目前正在研究如何使用各种现代处理器的快速单精度浮点倒数功能来计算基于定点 Newton-Raphson 迭代的 64 位无符号整数除法的起始近似值。它需要尽可能准确地计算 264/除数,其中初始近似
我是一名优秀的程序员,十分优秀!