简体   繁体   中英

find prime numbers between two numbers

I want to find prime numbers between two numbers that we get from the inputs, but I get this error:

num cannot be resolved to a variable

I read the code many times but couldn't find the problem!
Can you help me?

public class PrimeNumbers {
    public static void main(String[] args) {
        Scanner input1 = new Scanner(System.in);
        System.out.print("Enter Start number: ");
        int number1 = input1.nextInt();
        Scanner input2 = new Scanner(System.in);
        System.out.print("Enter End number: ");
        int number2 = input2.nextInt();
        input1.close();
        input2.close();
        int counter = 0;
        for (int num=number1; num<number2; num++)
            if (number1<2 || number2<2 || number2<number1)
                break;
            else if (isPrime(num))
                counter++;
                System.out.println(num);
        System.out.println("Total Prime Numbers Between " + number1 + " and " + number2 + " => " + counter);
    }
    
    static boolean isPrime(int number) { 
        if (number<2)
            return false;
        for (int i=number; i<number; i++)
            if (number%i==0)
                return false;
        return true; 
    }
}

Java ain't python: Indentation (or any from of whitespace) does not convey any code meaning.

The problem is the scope of num which is harder to see because your indentation is incorrect.

This code:

for (int num=number1; num<number2; num++)
    if (number1<2 || number2<2 || number2<number1)
        break;
    else if (isPrime(num))
        counter++;
        System.out.println(num);

When properly formatted is:

for (int num=number1; num<number2; num++)
    if (number1<2 || number2<2 || number2<number1)
        break;
    else if (isPrime(num))
        counter++;
System.out.println(num);

which shows the problem; the print is outside of the loop, so num is not defined there.

Use braces:

for (int num=number1; num<number2; num++)
    if (number1<2 || number2<2 || number2<number1)
        break;
    else if (isPrime(num)) {
        counter++;
        System.out.println(num);
    }

Or better yet, and it's best practice, is to use braces for all statement blocks, whether or not they are needed to compile:

for (int num=number1; num<number2; num++) {
    if (number1<2 || number2<2 || number2<number1) {
        break;
    } else if (isPrime(num)) {
        counter++;
        System.out.println(num);
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM