gpt4 book ai didi

java - 使用 MVC Java 显示素数

转载 作者:行者123 更新时间:2023-12-01 11:35:27 24 4
gpt4 key购买 nike

我有一个 Prime 类,它扩展了 JFrame,它有一个简单的 JSpinner 用于显示素数。

我想创建一个模型来无限显示素数(直到长结束)。这是我编写的模型类:

public class PrimeSpinnerModel extends AbstractSpinnerModel{

long current;

public PrimeSpinnerModel() {
this.current = 2;
}

@Override
public Object getValue() {
return current;
}

@Override
public Object getNextValue() {

long newLatest = current + 1;

if(isPrime(newLatest)){
current = newLatest;
}else{
System.out.println(newLatest + "no prime");
newLatest ++;
current = newLatest;
}
fireStateChanged();
return getValue();
}

@Override
public Object getPreviousValue() {

fireStateChanged();
return getValue(); // without this the component wouldn't know to update.
}

@Override
public void setValue(Object value) {
throw new IllegalArgumentException("Static spinner model Prime does not support editing.");
}
static boolean isPrime(long n) {
if (n == 1) return false;

for(long i = 2; i <= n/2; i++)
if(n % i == 0)
return false;

return true;
}
}

当我运行代码时,它显示质数为 2,3,5,7,9,11,13 等。

为什么显示9?

最佳答案

假设调用 getNextValue() 时 current 为 7。然后 newLatest 设置为 8。 isPrime(8) 显然是 false,因此您增加 newLatest,使其变为 9。您将其分配给 current 并返回它。这使得 9 成为 7 之后的下一个数字,无论它是否是质数。

要解决这个问题,您应该在 newLatest 不是素数时递增它(在循环中)。这样,您就可以确保继续下去,直到找到质数。见下文:

newLatest = current + 1;
while (!isPrime(newLatest)) {
newLatest++;
}
// newLatest now contains the new prime number.
current = newLatest;
// etc..

关于java - 使用 MVC Java 显示素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30038171/

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