2016-06-30 4 views
-1

Предполагается, что он печатает простые числа ниже 100, но он получает только число «3» в качестве выхода. Я только начинаю изучать Java, поэтому все выглядит правильно для меня.Что случилось с моей простой Java-программой?

public class ClassesAndObjects { 
    public static void main(String[] args) {   
     Prime n = new Prime(); 
     for (int i = 3; i < 100; i++){ 
      n.Number = i; 
      n.factors(); 
     } 
    } 

} 

class Prime{ 
    long Number; 
    long fact; 
    boolean state = true; 

    void factors(){ 
     for (fact = 2; fact < Number; fact++){ 
      if (fact != Number){ 
       if (Number % fact == 0){ 
        state = false; 
        break; 
       } 
      } 
     } 
     if (state == true){ 
      System.out.println(Number); 
     } 

    } 
} 
+0

Это должно быть одним из наихудших реализаций простых чисел в Java за все время. – Eiko

+0

Я только начинаю. Я понятия не имею, что я делаю. –

ответ

0

Вы должны сбросить логическое состояние истина в начале каждого вызова, в противном случае это всегда ложно для первого вызова, за исключением (когда я = 3)

void factors(){ 

    state = true; 
    for (fact = 2; fact < Number; fact++){ 
     if (fact != Number){ 
      if (Number % fact == 0){ 
       state = false; 
       break; 
      } 
     } 
    } 
    if (state == true){ 
     System.out.println(Number); 
    } 

} 
0

Добавить заявление, как это:

if (state == true){ 
     System.out.println(Number); 
    } 

    state = true; //reset the state variable 

Здесь мы сбросить переменные состояния верно для следующей итерации.

0

Ну, вы не имеете состояние = True по умолчанию в вашем методе factor(). Поэтому, когда он запускает state = false в первый раз (происходит при Number = 4), тогда он всегда является ложным. Просто добавьте выделенную строку в свой код, и вы хорошо пойдете.

void factors(){ 
    **boolean state = true;** 
    for (fact = 2; fact < Number; fact++){ 
     if (fact != Number){ 
      if (Number % fact == 0){ 
       state = false; 
       break; 
      } 
     } 
    } 
    if (state == true){ 
     System.out.println(Number); 
    } 

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