尝试编写代码,要求用户输入一个数字,确定它是否为素数,并列出一个和该数字之间的素数
Trying to write code that asks the user for a number, determines if it's prime, and lists the prime numbers between one and that number
出于某种原因,当我对此进行测试时,第二个 if 语句总是将 1 和用户输入的数字之间的每个数字打印为非质数,即使它是。但是,第三个 if 语句正确地说明了用户的号码是否为质数。我做错了什么吗?
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in) ;
System.out.println("intput a number") ;
int number = input.nextInt() ;
int counter = 0 ;
int counter2 = 0 ;
for (int i = 1 ; i <= number ; i++) {
for (int j = 1 ; j <= i ; j++) {
if (i % j == 0 ) {
counter ++ ;
}
else if (i%j != 0) {
}
}
if (counter != 2) {
System.out.println( i+" is not prime") ;
}
if (counter == 2) {
System.out.println(i+", is a prime") ;
}
System.out.println("\n") ;
if (number % i == 0) {
counter2 ++ ;
}
}
if (counter2 != 2) {
System.out.println( number+" is not prime") ;
}
else if (counter2 == 2){
System.out.println( number+" is a prime") ;
}
}
您对所有数字使用同一个计数器,但您没有重置它,因此计数器的值不断增加。
int counter;
int counter2 = 0 ;
for (int i = 1 ; i <= number ; i++) {
//Resets the counter
counter = 0 ;
for (int j = 1 ; j <= i ; j++) {
if (i % j == 0 ) {
counter ++ ;
}
else if (i%j != 0) {
}
}
//You don't need two if's if one is the negation of the other
if (counter != 2) {
System.out.println( i+" is not prime") ;
}
else{
System.out.println(i+", is a prime") ;
}
System.out.println("\n") ;
if (number % i == 0) {
counter2 ++ ;
}
}
//You don't need two if's if one is the negation of the other
if (counter2 != 2) {
System.out.println( number+" is not prime") ;
}
else{
System.out.println( number+" is a prime") ;
}
另外,如果你制作一个 isPrime 函数来告诉你数字是否为素数,你也可以避免头痛,它看起来会更干净。
你的程序似乎有点过于复杂,为什么不直接做一个方法来判断它是否prime
呢?。
示例:
public static boolean isPrime(int number){
if(number <= 1) return false;
for (int i = 2; i < number; i++){
if (number % i == 0) return false;
}
return true;
}
在您的主要方法中,只需这样调用它:
Scanner input = new Scanner(System.in) ;
System.out.println("input a number") ;
int number = input.nextInt() ;
for (int i = 1 ; i <= number ; i++) {
if(isPrime(i)){
System.out.println( i+" is a prime") ;
}else{
System.out.println( i+" is NOT a prime") ;
}
}
出于某种原因,当我对此进行测试时,第二个 if 语句总是将 1 和用户输入的数字之间的每个数字打印为非质数,即使它是。但是,第三个 if 语句正确地说明了用户的号码是否为质数。我做错了什么吗?
public static void main(String[] args) {
@SuppressWarnings("resource")
Scanner input = new Scanner(System.in) ;
System.out.println("intput a number") ;
int number = input.nextInt() ;
int counter = 0 ;
int counter2 = 0 ;
for (int i = 1 ; i <= number ; i++) {
for (int j = 1 ; j <= i ; j++) {
if (i % j == 0 ) {
counter ++ ;
}
else if (i%j != 0) {
}
}
if (counter != 2) {
System.out.println( i+" is not prime") ;
}
if (counter == 2) {
System.out.println(i+", is a prime") ;
}
System.out.println("\n") ;
if (number % i == 0) {
counter2 ++ ;
}
}
if (counter2 != 2) {
System.out.println( number+" is not prime") ;
}
else if (counter2 == 2){
System.out.println( number+" is a prime") ;
}
}
您对所有数字使用同一个计数器,但您没有重置它,因此计数器的值不断增加。
int counter;
int counter2 = 0 ;
for (int i = 1 ; i <= number ; i++) {
//Resets the counter
counter = 0 ;
for (int j = 1 ; j <= i ; j++) {
if (i % j == 0 ) {
counter ++ ;
}
else if (i%j != 0) {
}
}
//You don't need two if's if one is the negation of the other
if (counter != 2) {
System.out.println( i+" is not prime") ;
}
else{
System.out.println(i+", is a prime") ;
}
System.out.println("\n") ;
if (number % i == 0) {
counter2 ++ ;
}
}
//You don't need two if's if one is the negation of the other
if (counter2 != 2) {
System.out.println( number+" is not prime") ;
}
else{
System.out.println( number+" is a prime") ;
}
另外,如果你制作一个 isPrime 函数来告诉你数字是否为素数,你也可以避免头痛,它看起来会更干净。
你的程序似乎有点过于复杂,为什么不直接做一个方法来判断它是否prime
呢?。
示例:
public static boolean isPrime(int number){
if(number <= 1) return false;
for (int i = 2; i < number; i++){
if (number % i == 0) return false;
}
return true;
}
在您的主要方法中,只需这样调用它:
Scanner input = new Scanner(System.in) ;
System.out.println("input a number") ;
int number = input.nextInt() ;
for (int i = 1 ; i <= number ; i++) {
if(isPrime(i)){
System.out.println( i+" is a prime") ;
}else{
System.out.println( i+" is NOT a prime") ;
}
}