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) {
System.out.println("Die eingegebene Zahl ist eine Primzahl");
}
else {
System.out.println("Die eingegebene Zahl ist keine Primzahl");
}
scanner.close();
}
}
我尝试编写一个代码,检查它是否是质数。但是我不明白逻辑。
问题:为什么0或1仍然是质数,我该如何解决?
答案 0 :(得分:0)
您的代码只会将数字标记为“非质数”,即ergebnis = true
是指发现等于或大于2的除数。显然,0
和1
都没有这样的除数。
因此,只需额外检查一下数字是否小于2:
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
答案 1 :(得分:0)
添加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();
}}