java无法找到打印素数的错误

标签 java

该程序从用户处获取 4 个输入,并打印出除重复对之外的所有对。我希望它只打印总和等于素数的对。我完成了整个程序,没有编译错误,但在输出中,它打印到除重复对之外的所有对(我希望它只打印总和=素数的对)任何人都可以告诉我我做错了什么

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Prime {
    public static List<Integer> numbers = new ArrayList<>(); // a list of integers that was accepted, can be acced in the order they were added
    public static Scanner input = new Scanner(System.in);
    public static void main(String args[])
    {
        int inputs = 4; 
        input(inputs);
        for(int i = 0; i < inputs; i++){ 
            for(int j = 0+i; j < inputs; j++){
                if(i != j) 
                    System.out.println(numbers.get(i)+ " + " + numbers.get(j) + " = "+ isPrime(numbers.get(i) + numbers.get(j)));                  
            }
        }   }   

    public static int isPrime (int sumPair)
    {
        boolean primeVal =true ;
        if(sumPair < 2)
            primeVal= false;            
        else if(sumPair ==2)
            primeVal=true;         
        else if (sumPair % 2 == 0)
            primeVal = false;
        else
        {
            int stop = (int)Math.sqrt(sumPair);
            for (int d = 3; d <= stop && primeVal; d = d + 2)
            {
                if (sumPair % d == 0)
                    primeVal = false;
            }
        }
        return(sumPair);
    }

    public static void input(int inputNumbers) 
    {
        while(numbers.size() < inputNumbers){ // while there is more inputs needed
            System.out.print("Enter a positive integer: ");
            int num = input.nextInt();
            if(num > 0) // if the input is valid
                numbers.add(num);
            else // if the input is not valid
                while (num <= 0) { // while the input is not valid
                    System.out.print("Enter a positive integer: ");
                    num = input.nextInt(); // get the next int if it wasn't valid
                    if(num > 0) { // if the input gets valid
                        numbers.add(num);
                    }
                }
            System.out.println("Thank you.");
        }
    }

    public static int sumPair(int num1, int num2)
    {    
        return num1 + num2;
    }

}

最佳答案

您花费了很多精力来计算 boolean 值 primeVal 来告诉输入是 true 还是 false,但您实际上从未返回该值。试试这个:

public static boolean isPrime (int sumPair) {
    boolean primeVal = true;
    if (sumPair < 2 || sumPair % 2 == 0) {
        primeVal = false;            
    }      
    else {
        int stop = (int)Math.sqrt(sumPair);
        for (int d=3; d <= stop; d += 2) {
            if (sumPair % d == 0) {
                primeVal = false;
                break;
            }
        }
    }
    return primeVal;
}

使用这个main()方法:

public static void main (String args[]) {
    int inputs = 4; 
    input(inputs);
    for (int i=0; i < inputs-1; i++) { 
        for (int j=i+1; j < inputs; j++) {
            boolean prime = isPrime(numbers.get(i) + numbers.get(j));
            if (prime) {
                System.out.println(numbers.get(i) + " + " + numbers.get(j));
            }                
        }
    }
}  

关于java无法找到打印素数的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43142287/

相关文章:

java - 这个电子邮件验证表达式在 Java 中如何工作?

java - 使用两个 JFrame slider 作为最小值和最大值 setter ,如何也只允许最小值达到最大值?

java - 如何更改AWT标签字体

java - 如果子类的字段隐藏了父类(super class)的同名字段,那么这两个字段在内部到底会发生什么?

java - 我想在 Android Studio 中制作一个总统评论应用程序,其中包含每位总统的照片,但我不断收到 OutOfMemoryError

java - 如何知道一个日期范围是否与 Java 中的另一个日期范围相交 - Groovy

java - 如何重定向到在 play 框架中有 post 方法的 Action

java - Selenium HtmlUnitDriver 在随机位置随机挂起

java - 冒泡排序优于选择排序?

java - Quickfix 受体验证