java - java 程序中的素数切换有意外的输出

标签 java for-loop switch-statement

我正在尝试创建一个程序,该程序读取 10 个整数的列表,并询问用户是否想知道输入的整数是偶数/奇数、素数或其符号。 我不明白错误在哪里:

import java.io.*;
public class Menu1 {
public static void main(String args[])throws IOException{
    BufferedReader b=new BufferedReader(new InputStreamReader(System.in));
    int array[]=new int[10];
    int a=0, i=0;
    System.out.println("Welcome, please enter 10 integers:");
    try{
        for(i=0;i<10;i++){
            System.out.println("Enter integer "+(i+1)+":");
            array[i]=Integer.parseInt(b.readLine());
        }
    }catch(NumberFormatException e){
        System.err.println("Not an integer! "+e.getMessage());
    }           
    System.out.println("What would you like to know?\n(1) Even/Odd\n(2) Primes\n(3) Sign");
    try{
        a=Integer.parseInt(b.readLine());   
    }catch(NumberFormatException e){
        System.err.println("Not an integer! "+e.getMessage());
    }       
    switch (a){
    case 1:
        for(i=0;i<10;i++){
            if(array[i]%2==0)
                System.out.println(array[i]+" is even");
            else
                System.out.println(array[i]+" is odd");
        }
        break;
    case 2:
        for(int j=0;j<10;j++){
            for(i=2;i<array[j];i++){
                if(array[j]%i==0)
                    System.out.println(array[j]+" isn't prime");
                else
                    System.out.println(array[j]+" is prime");
            }
        }
        break;
    case 3:
        for(i=0;i<10;i++){
            if(array[i]>0)
                System.out.println(array[i]+" is positive");
            else if(array[i]<0)
                System.out.println(array[i]+" is negative");
            else
                System.out.println(array[i]+" has no sign");
        }
        break;
    default:
        System.out.println("Invalid Option");
    }
}

}

情况 1 和情况 3 工作得很好,情况 2 是出现奇怪输出的地方;任何帮助将不胜感激

最佳答案

在案例 2 的代码中:

case 2:
    for(int j=0;j<10;j++){
        for(i=2;i<array[j];i++){
            if(array[j]%i==0)
                System.out.println(array[j]+" isn't prime");
            else
                System.out.println(array[j]+" is prime");
        }
    }
    break;

您已经放置了一个 System.out.println() 语句,它将在 for 循环的每次迭代中执行。因此,如果数组中的给定元素 array 为 5,您的代码将打印出您的数字是否可以被 2 到 5 之间的每个数字整除。这可能不是您想要的.

要解决此问题,有几个选项:首先,您可以在发现数字不是质数时设置一个 boolean 标志,然后检查它并在内部 for 循环后打印结果:

case 2:
    for(int j=0;j<10;j++){
        boolean isPrime = true; // assume it's prime
        for(i=2;i<array[j];i++){
            if(array[j]%i==0)
                isPrime = false;
                break; // get out of the inner for loop early
        }
        if(isPrime)
            System.out.println(array[j]+" is prime");
        else
            System.out.println(array[j]+" isn't prime");
    }
    break;

关于java - java 程序中的素数切换有意外的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26068715/

相关文章:

java - 所有映射的 RequestMapping 值的列表

java - 并排打印 csv 中的两个数组

java - 一些 if 在 switch-case block 中

php - 我可以在 switch 中多次使用相同的 case 值吗

Java 等效于使用 curl 命令行实用程序对带有证书的 https url 进行 rest 调用

Java 3d 图表 JavaGnuplotHybrid

javascript - 遍历窗口对象中的所有项目

C:默认之前是空箱,没用吗?

java - java中的静态类和final类

python - 如何让我的计数重置为循环