2013-11-01 1 views
0

Поэтому мне пришлось написать простой код, который вычислял бы уравнение 3N + 1; где N - целочисленный тип пользователя, и если он является целым положительным числом, чем N = N/2, и если отрицательное целое число, отличное от N = N * 3 + 1.Почему мой «While Loop» не вычисляет и не распечатывает простое уравнение 3N + 1?

Однако из того, что я могу понять, мой код не работать после первого цикла while и, следовательно, ничего не печатает. Что я делаю не так? Новое в программировании и все еще учусь, так что я ценю вашу помощь :)

Код:

import java.util.Scanner; 
public class ThreeNplusOneProgram { 

    public static void main(String[] args) { 

     int N; Scanner input = new Scanner(System.in); int counter; 

     System.out.println("Please Enter an integer: "); 
     N = input.nextInt(); 

     while (N <= 0) { 
      System.out.println("ERROR: Please Enter an integer greater than zero: "); 
      N = input.nextInt(); 
     } 

     //So far we know that N is great than Zero 

     System.out.println(N); 
     counter = 1; 
     while (N != 1) { 

      if (N == N % 2) 
       N = N/2; 

      else N = N * 3 + 1; 

      counter = counter + 1; 

     } 

     System.out.println("There were" + counter + "terms in the sequence"); 
    } 

} 
+0

Я пробовал ваш код, и он отлично работает при применении совета @LeeNeverGup –

ответ

5

Это неправильно: if (N == N % 2) N% 2 возвращает 1 или 0. Вы должны использовать if (0 == N % 2) для проверки того нечетный/четный.

+0

Я не вопрос рейзера, но я свидетельствую, что ваш ответ правильный, и это единственная серьезная проблема данной программы. –

0

Проблема заключается в вашем if (N == N % 2), вы можете просто хотеть проверить if (N >= 0), так как вы заявляете, что хотите проверить if it is a positive integer.

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

  • Нет связанных вопросов^_^