用 MVC 显示素数 Java
Display Prime numbers with MVC Java
我有一个扩展 JFrame 的 Prime class,它有一个用于显示素数的简单 JSpinner。
我想创建一个无限显示质数的模型(直到 long 结束)。这是模型 class 我写的:
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()
时当前为7。然后 newLatest 设置为 8。isPrime(8)
显然是错误的,所以你增加 newLatest,使其成为 9。你将它分配给 current 和 return 它。这使得 9 成为 7 之后的下一个数字,无论它是否为质数。
要解决这个问题,您应该在 newLatest 不是素数时递增它(在循环中)。这样,您可以确保继续下去,直到找到素数。见下文:
newLatest = current + 1;
while (!isPrime(newLatest)) {
newLatest++;
}
// newLatest now contains the new prime number.
current = newLatest;
// etc..
试试这个:)
public static void showPrimeNumbers(int n){
for (int i=2; i<n; i++){
boolean istrue = true;
for (int x=2; x<i; x++){
if (i%x==0){
istrue = false;
}
}
if (istrue==true){
System.out.println(i);
}
}
}
我有一个扩展 JFrame 的 Prime class,它有一个用于显示素数的简单 JSpinner。
我想创建一个无限显示质数的模型(直到 long 结束)。这是模型 class 我写的:
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()
时当前为7。然后 newLatest 设置为 8。isPrime(8)
显然是错误的,所以你增加 newLatest,使其成为 9。你将它分配给 current 和 return 它。这使得 9 成为 7 之后的下一个数字,无论它是否为质数。
要解决这个问题,您应该在 newLatest 不是素数时递增它(在循环中)。这样,您可以确保继续下去,直到找到素数。见下文:
newLatest = current + 1;
while (!isPrime(newLatest)) {
newLatest++;
}
// newLatest now contains the new prime number.
current = newLatest;
// etc..
试试这个:)
public static void showPrimeNumbers(int n){
for (int i=2; i<n; i++){
boolean istrue = true;
for (int x=2; x<i; x++){
if (i%x==0){
istrue = false;
}
}
if (istrue==true){
System.out.println(i);
}
}
}