2014-01-31 2 views
-3

У меня есть вопрос о проблеме. Я новичок в этом, поэтому я ценю вашу помощь! Код должен запросить два пользовательских номера ввода и распечатать на консоли все простые числа между этими двумя. Вот код, который я не получил до сих пор: (. Это не проверяет число между этими двумя, только распечатав один номер, если это простое)Все простые числа между двумя разобранными номерами пользователей

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; 
    } 
} 

... и в основном классе:

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(); 

    } 
} 
+5

Что вы хотите сказать? Закончите мой код? Это не так, как работает SO. У вас должна быть конкретная проблема. –

+0

Мой вопрос в том, что отсутствует/неправильно в моем коде, чтобы делать то, что я хочу? (напечатайте каждый штрих b/n двух чисел) ... (как я уже сказал, я новичок, извините, если вопрос не настолько конкретный) – tgfofp

+3

Когда вы отправляете код, убедитесь, что он действительно компилируется. В коде, который вы отправили, отсутствовали открывающие скобки, и отступы были повсюду. Если вы хотите, чтобы люди читали ваш код, убедитесь, что он доступен для чтения. Используйте 4 пробела (без вкладок) для отступов и убедитесь, что отступы совпадают. –

ответ

1

У вас есть скопированный код с какого-либо места. Проблема в том, что вы ломаетесь после первого значения.

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(); 
     } 
    } 
+0

Спасибо! Я понял ваш код и заставил его работать:) – tgfofp

+0

'if (x == 1) continue; buffer.append (j + ""); 'в структурированном программировании это обычно записывается как' if (x/= 1) { buffer.append (j + ""); } '. Кроме того, для таких переменных флагов дескриптивное имя будет использоваться как self-documentaiton, например 'is_composite' вместо' x'. --- +1 для 'for (int k = 3; (k * k) <= j; k + = 2)'. –

0

Мой самый быстрый способ проверить, если число простое:

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; 
} 
0

Вы дали return в number() методе вместо break и continue. number() метод не вызывается в цикле в main(), который нужно возвращать для каждой итерации. Также возврат boolean просто не имеет смысла.

Я покажу вам несколько изменений, которые вам нужно сделать, что заставит программу распечатать несколько номеров. Но это не значит, что он правильный выход. Логика для простых чисел сильно ошибочна. Вы должны это исправить. Я просто помогаю вам решить основную проблему, почему вы не получаете какой-либо результат.

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); 
    } 
} 

Я дал break и continue избежать return заявлений, но на самом деле, логика действительно нуждается в пересмотре.

Смежные вопросы