Question

I have a question about a problem. I'm a beginner at this so I appreciate your help! The code should ask for two user input numbers, and will print out in the console all the prime numbers between these two. Here is the code I got until now: (It's not checking the numbers between these two, only printing out the one number if it's a prime. )

package questionsAndAnswers;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Number {
    static boolean primes;
    public static boolean number( ) {
        try {
            for (int i = 0; i < 2; i++) {
                BufferedReader br = new BufferedReader(new InputStreamReader System.in));
                String num1 = br.readLine();
                String num2 = br.readLine();

                int number1 = Integer.parseInt(num1);
                int number2 = Integer.parseInt(num2);

                for (int j = number1; j < number2; j++) {
                    if ( (j % 2) == 0 ) return true;
                    for (int k = 3; (k*k) <= j; k+=2) {
                        if(j % k == 0) {
                            return false;
                        }
                        System.out.println("All the primes b/n number " + number1 + " and number" + number2 + "  are :" + j );
                        return true;
                    }
                    System.out.println(primes);
                    // br.close();
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return primes;
    }
}

...and in the main class :

public class TwoWholeNumbers {

    public static void main(String[] args) {

        System.out.println("Enter two integer numbers to see what is the multitude b/w them: ");
        Number.number();

    }
}
Was it helpful?

Solution

You have copy pasted code from some place. Issue is you are breaking after first value.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Number {
    static boolean primes;

    public static boolean number() {
        try {     
            StringBuffer buffer = new StringBuffer();
            for (int i = 0; i < 2; i++) {

                BufferedReader br = new BufferedReader(new InputStreamReader(
                            System.in));
                String num1 = br.readLine();
                String num2 = br.readLine();

                int number1 = Integer.parseInt(num1);
                int number2 = Integer.parseInt(num2);

                for (int j = number1; j < number2; j++) {
                    if ( (j % 2) == 0 ) {
                        continue;
                    }
                    int x=0;
                    for (int k = 3; (k*k) <= j; k+=2) {
                        if(j % k == 0) {
                            x=1;
                            break;
                        }
                    }
                    if(x==1) continue;
                    buffer.append(j + " ");
                }
                System.out.println("All the primes b/n number " 
                       + number1  + " and number" + number2 + "  are :" 
                       + buffer.toString() );        
            }
        } catch (IOException e) {
              e.printStackTrace();
              }
        return primes;
    }

    public static void main(String[] args) {

        System.out.println("Enter two integer numbers to see what "
                           + "is the multitude b/w them: ");
        Number.number();
        }
    }

OTHER TIPS

My fastest way to check if number is prime:

boolean isPrime(int p) {
  int m = (int) Math.sqrt(p);
  if(m<2) {
    return true;
  }else {
    for(int i = 2;i++;i<=m) {
      if((p % i)==0) {
        return false;
      }
    }
  }
  return true;
}

You have given return in the number() method instead of break and continue. number() method is not called in a loop in the main() that you need to return for each iteration. Also the boolean return simply doesn't make sense.

I'll show you a few changes you need to do, which will make the program print out a few numbers. But that doesn't mean its the correct output. The logic for prime numbers is highly faulty. You'll have to fix that. I'm just helping you solve the basic problem of why you don't get any output.

for (int j = number1; j < number2; j++) {
    if ((j % 2) == 0)
        continue; // return true replaced by continue
    for (int k = 3; (k * k) <= j; k += 2) {
        if (j % k == 0) {
            break; // return false replaced by break
        }
        System.out.println("All the primes b/n number "
                + number1 + " and number" + number2 + "  are :"
                + j);
    }
}

I've given the break and continue to avoid return statements, but in reality, the logic really needs a makeover.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top