Java 素数-困境

Java 素数-困境,java,loops,netbeans,Java,Loops,Netbeans,我试图检查给定的数字是否为素数。首先采用试算法。但是这个程序的行为很奇怪。这是我用过的 int no; no = Integer.parseInt(jTextField1.getText()); for (int i = 2; i < no; i = i + 1) { if(no % i == 0) { jTextArea1.setText("No. is not prime"); } else { jTextArea1.setText("No

我试图检查给定的数字是否为素数。首先采用试算法。但是这个程序的行为很奇怪。这是我用过的

int no;
no = Integer.parseInt(jTextField1.getText());

for (int i = 2; i < no; i = i + 1) {
   if(no % i == 0) {
      jTextArea1.setText("No. is not prime");
   }
   else {
      jTextArea1.setText("No is prime");
   }
}
int-no;
否=Integer.parseInt(jTextField1.getText());
对于(int i=2;i
程序始终将输出显示为“否为基本值”。 我知道这是一个很小的问题,但我们将不胜感激


另外,我正在使用Netbeans。

您遇到的问题是在每次迭代中重置文本。即使在为
no
找到一个除数并将文本设置为表示它不是素数之后,您仍会继续检查其他数字,这些数字不会均匀地划分到您的数字中

相反,您要做的是每次通过循环检查“素数”,但只设置一次文本:

    boolean prime = true;
    for (int i = 2; i < no; i = i + 1) {
        if (no % i == 0) {
            jTextArea1.setText("No. is not prime");
            prime = false;
            break;  // once we have found a divisor, we can stop looking
        }
    }
    if (prime) {
        jTextArea1.setText("No is prime")
    }
布尔素数=true;
对于(int i=2;i
您遇到的问题是每次迭代时都要重置文本。即使在为
no
找到一个除数并将文本设置为表示它不是素数之后,您仍会继续检查其他数字,这些数字不会均匀地划分到您的数字中

相反,您要做的是每次通过循环检查“素数”,但只设置一次文本:

    boolean prime = true;
    for (int i = 2; i < no; i = i + 1) {
        if (no % i == 0) {
            jTextArea1.setText("No. is not prime");
            prime = false;
            break;  // once we have found a divisor, we can stop looking
        }
    }
    if (prime) {
        jTextArea1.setText("No is prime")
    }
布尔素数=true;
对于(int i=2;i
您遇到的问题是每次迭代时都要重置文本。即使在为
no
找到一个除数并将文本设置为表示它不是素数之后,您仍会继续检查其他数字,这些数字不会均匀地划分到您的数字中

相反,您要做的是每次通过循环检查“素数”,但只设置一次文本:

    boolean prime = true;
    for (int i = 2; i < no; i = i + 1) {
        if (no % i == 0) {
            jTextArea1.setText("No. is not prime");
            prime = false;
            break;  // once we have found a divisor, we can stop looking
        }
    }
    if (prime) {
        jTextArea1.setText("No is prime")
    }
布尔素数=true;
对于(int i=2;i
您遇到的问题是每次迭代时都要重置文本。即使在为
no
找到一个除数并将文本设置为表示它不是素数之后,您仍会继续检查其他数字,这些数字不会均匀地划分到您的数字中

相反,您要做的是每次通过循环检查“素数”,但只设置一次文本:

    boolean prime = true;
    for (int i = 2; i < no; i = i + 1) {
        if (no % i == 0) {
            jTextArea1.setText("No. is not prime");
            prime = false;
            break;  // once we have found a divisor, we can stop looking
        }
    }
    if (prime) {
        jTextArea1.setText("No is prime")
    }
布尔素数=true;
对于(int i=2;i
问题是,如果找到除数,仍会继续运行循环

有几种方法可以解决这个问题。最简单的方法是,当找到除数时,退出循环:

for (int i=2;i<no;i=i+1 ){
    if(no%i==0) {
        jTextArea1.setText("No. is not prime"); 
        break;
    }
    else {
        jTextArea1.setText("No is prime");
    }
}
jTextArea1.setText("No is prime");
for (int i=2; i<no; i=i+1) {
    if(no%i==0) {
        jTextArea1.setText("No. is not prime"); 
        break;
    }
}

这样做的目的是将文本设置为
“No是prime”
;然后,如果它找到一个除数,它会将其更改为
“No.is not prime”
,然后退出循环,因为不需要继续。(请注意,这样做意味着如果
no
为2,它将起作用。在原始代码中,循环根本不会运行,其效果是文本区域永远不会被设置为任何值。)在实践中,我会使用azurefrog推荐的
布尔值,这样文本区域就不会被设置两次(对于较大的数字,将其设置为“No is prime”
,然后在半秒钟后更改它可能会让用户感到不安)。

问题是,如果找到除数,仍会继续运行循环

有几种方法可以解决此问题。最简单的方法是,当找到除数时,退出循环:

for (int i=2;i<no;i=i+1 ){
    if(no%i==0) {
        jTextArea1.setText("No. is not prime"); 
        break;
    }
    else {
        jTextArea1.setText("No is prime");
    }
}
jTextArea1.setText("No is prime");
for (int i=2; i<no; i=i+1) {
    if(no%i==0) {
        jTextArea1.setText("No. is not prime"); 
        break;
    }
}

这样做的目的是将文本设置为
“No is prime”
;然后如果它找到一个除数,它会将其更改为
“No.is not prime”
,然后退出循环,因为它不必继续运行。(请注意,这样做意味着如果
no
为2,它将起作用。在原始代码中,循环根本不会运行,其效果是文本区域永远不会被设置为任何值。)在实践中,我会使用azurefrog推荐的
布尔值,这样文本区域就不会被设置两次(对于较大的数字,将其设置为“No is prime”
,然后在半秒钟后更改它可能会让用户感到不安)。

问题是,如果找到除数,仍会继续运行循环

有几种方法可以解决此问题。最简单的方法是,当找到除数时,退出循环:

for (int i=2;i<no;i=i+1 ){
    if(no%i==0) {
        jTextArea1.setText("No. is not prime"); 
        break;
    }
    else {
        jTextArea1.setText("No is prime");
    }
}
jTextArea1.setText("No is prime");
for (int i=2; i<no; i=i+1) {
    if(no%i==0) {
        jTextArea1.setText("No. is not prime"); 
        break;
    }
}
这样做的目的是将文本设置为
“No is prime”
;然后如果它找到一个除数,它会将其更改为
“No.is not prime”
,然后退出循环,因为它不必继续运行。(请注意,这样做意味着如果
no
为2,它将起作用。在原始代码中,循环根本不会运行,其效果是文本区域永远不会被设置为任何值。)在实践中,我会使用azurefrog推荐的
布尔值
,这样文本区域就不会