首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prime/Composite程序的问题

Prime/Composite程序的问题
EN

Stack Overflow用户
提问于 2022-02-03 23:09:17
回答 3查看 73关注 0票数 1

我是Java新手,目前正在尝试创建一个程序,以确定输入的数字是质数还是复合数。我已经猜到了大部分,但有一部分让我感到困惑。

我希望代码打印一条消息,如果输入一个0或一个负数,说明“该数字需要大于1”,或者如果输入一个1,则"one既不是素数也不是复合数字“。

这是我的密码:

代码语言:javascript
复制
public class Main {

public static void main(String[] args) {
    
    int num;
    boolean prime = true;
    String answer;
    Scanner keyboard = new Scanner(System.in);
    
    do {
        
    System.out.print("Please enter a number ==> ");
    num = keyboard.nextInt();
    
    if (num < 1)
        System.out.println("The number entered needs to be greater than one.");
    else if (num == 1)
        System.out.println("One is neither a prime nor composite number.");
    else {
        for (int ii = 2; ii <= num/2; ii++) {
            if (num % ii == 0) {
                prime = false;
                break;
            }
        }
    }
    if (prime == true)
        System.out.println("The integer " + num + " is prime.");
    else {
        System.out.println("The integer " + num + " is composite.");
    }
    
    System.out.print("Would you like to go again? (yes/no) ");
    answer = keyboard.next();
    System.out.print("\n");
    } while (answer.equals("yes"));
}

}

我的问题是,当我运行代码并输入0、1或负数时,代码会打印正确的消息,但是添加“整数"0,1,-#”是素数。“

我不希望它这样做,只希望它打印相应的消息。我遗漏了什么?

EN

回答 3

Stack Overflow用户

发布于 2022-02-03 23:19:35

只需在else中移动print语句就可以修复逻辑。

此外,还有更多的改进可以排除除2以外的偶数,并寻找素数,直到num的平方根实现为止。

代码语言:javascript
复制
if (num < 1)
    System.out.println("The number entered needs to be greater than one.");
else if (num == 1)
    System.out.println("One is neither a prime nor composite number.");
else {
    prime = num % 2 == 1 || num == 2;
    for (int ii = 3; prime && ii * ii <= num; ii += 2) {
        if (num % ii == 0) {
            prime = false;
        }
    }
    if (prime)
        System.out.println("The integer " + num + " is prime.");
    else {
        System.out.println("The integer " + num + " is composite.");
    }
}
票数 1
EN

Stack Overflow用户

发布于 2022-02-03 23:19:46

无论num的值如何,此代码都在执行:

代码语言:javascript
复制
if (prime == true)
    System.out.println("The integer " + num + " is prime.");
else {
    System.out.println("The integer " + num + " is composite.");
}

要解决这个问题,只需将其移到the语句中即可。

代码语言:javascript
复制
    if (num < 1)
        System.out.println("The number entered needs to be greater than one.");
    else if (num == 1)
        System.out.println("One is neither a prime nor composite number.");
    else {
        for (int ii = 2; ii <= num/2; ii++) {
            if (num % ii == 0) {
                prime = false;
                break;
            }
        }
        if (prime == true)
            System.out.println("The integer " + num + " is prime.");
        else {
            System.out.println("The integer " + num + " is    composite.");
        }
    }
票数 1
EN

Stack Overflow用户

发布于 2022-02-03 23:25:23

它打印语句的原因是,如果值小于1,则if代码将始终运行(因为您已经将素布尔值初始化为true )。对此进行修正,以将最后一条if语句移到inside部件中。

代码语言:javascript
复制
public class Main {

    public static void main(String[] args) {

        int num;
        boolean prime = true;
        String answer;
        Scanner keyboard = new Scanner(System.in);

        do {

            System.out.print("Please enter a number ==> ");
            num = keyboard.nextInt();

            if (num < 1)
                System.out.println("The number entered needs to be greater than one.");
            else if (num == 1)
                System.out.println("One is neither a prime nor composite number.");
            else {
                for (int ii = 2; ii <= num / 2; ii++) {
                    if (num % ii == 0) {
                        prime = false;
                        break;
                    }
                }
                if (prime == true)
                    System.out.println("The integer " + num + " is prime.");
                else {
                    System.out.println("The integer " + num + " is composite.");
                }
            }

            System.out.print("Would you like to go again? (yes/no) ");
            answer = keyboard.next();
            System.out.print("\n");
        } while (answer.equals("yes"));
    }
}

然后,它不会像前面那样给出额外的print语句。

代码语言:javascript
复制
Please enter a number ==> 1
One is neither a prime nor composite number.
Would you like to go again? (yes/no)        
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70979552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档