2 回答
TA贡献1862条经验 获得超6个赞
您的代码只会将数字标记为“非质数”,即ergebnis = true如果您找到一个等于或大于 2 的除数。显然,既没有0也没有1这样的除数。
所以只需添加一个额外的检查数字是否小于二:
if (n < 2) {
ergebnis = true; // meaning 'not prime'
}
(顺便说一句:变量名的选择很糟糕。ergebnis(德语中的“结果”)是否意味着结果是“它是素数”或“不是素数”?)
此外,您可以改进您的评论:不要只是重复代码的作用,而是解释它为什么这样做以及它的含义。例如,而不是
if((n%i)==0) //Wenn n mod 2 = 0
怎么样
if((n%i)==0) //divisor found -> not a prime
TA贡献1775条经验 获得超11个赞
添加n>1条件。
然后它也会为0、1和负数给出正确的结果!
import java.util.Scanner;
public class Primzahl {
public static void main(String [] args) {
boolean ergebnis=false; //Abfragen ob Ergebnis wahr oder falsch
int i;
int n; //Variablen deklarieren
Scanner scanner = new Scanner(System.in); //Scanner aufrufen
System.out.println("Bitte geben Sie die erste zu untersuchende Zahl ein: \n");
n=scanner.nextInt();
System.out.println(" \nEs wird nun überprüft, ob die Zahl " + n + " eine Primzahl ist: \n" );
for (i=2;i<n;i++){ //Zählvariable; Bedingung; Schrittweite
if((n%i)==0) //Wenn n mod 2 = 0
{
ergebnis=true;
}}
if (ergebnis==false && n>1)
{
System.out.println("Die eingegebene Zahl ist eine Primzahl");
}
else
{
System.out.println("Die eingegebene Zahl ist keine Primzahl");
}
scanner.close();
}}
添加回答
举报