2013-11-30 2 views
0

Когда я вхожу «3» в мой код Java, он печатаетВключите алгоритм Assembler в калькулятор Java Sequence

3 умножается на 3 и +1 значение равно 10

Любые советы о том, как Я должен изменить его так, чтобы он правильно вычислял последовательности

import javax.swing.*; 
public class sequences { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
      calculateSequences(); 
    }//ends main 

    public static void calculateSequences() 
     { 
      int value; 
      String valueInput = JOptionPane.showInputDialog("Value"); 
      value = Integer.parseInt(valueInput); 

      if(value == 1) 
      { 
       System.out.println("Value is equal to 1, closing down"); 
       System.exit(0); 

      } 
      else if ((value%2)==0) 
      { 
      System.out.println(value + " will be divided by 2"); 
      value = value/2; 
      System.out.println("Value is even " + value); 

      } 
      else 
      { 
       System.out.println(value + " will be multiplied by 3 and +1"); 
       value = 3*value+1; 
       System.out.println("Value is " + value); 

      } 

     }//ends calculateSequences 
}//ends class 

ответ

1

Вы забыли «идут, чтобы начать»

Вот результаты одного теста.

23 will be multiplied by 3 and + 1 
Value is 70 
70 will be divided by 2 
Value is even 35 
35 will be multiplied by 3 and + 1 
Value is 106 
106 will be divided by 2 
Value is even 53 
53 will be multiplied by 3 and + 1 
Value is 160 
160 will be divided by 2 
Value is even 80 
80 will be divided by 2 
Value is even 40 
40 will be divided by 2 
Value is even 20 
20 will be divided by 2 
Value is even 10 
10 will be divided by 2 
Value is even 5 
5 will be multiplied by 3 and + 1 
Value is 16 
16 will be divided by 2 
Value is even 8 
8 will be divided by 2 
Value is even 4 
4 will be divided by 2 
Value is even 2 
2 will be divided by 2 
Value is even 1 
Value is equal to 1, closing down 

Вот ваш код с добавленным предложением.

import javax.swing.JOptionPane; 

public class Sequences { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     calculateSequences(); 
    }// ends main 

    public static void calculateSequences() { 
     int value; 
     String valueInput = JOptionPane.showInputDialog("Value"); 
     value = Integer.parseInt(valueInput); 

     while (value > 0) { 
      if (value == 1) { 
       System.out.println("Value is equal to 1, closing down"); 
       System.exit(0); 

      } else if ((value % 2) == 0) { 
       System.out.println(value + " will be divided by 2"); 
       value = value/2; 
       System.out.println("Value is even " + value); 

      } else { 
       System.out.println(value + " will be multiplied by 3 and + 1"); 
       value = 3 * value + 1; 
       System.out.println("Value is " + value); 

      } 
     } 

    }// ends calculateSequences 

} 
+0

что теперь работает, спасибо. – AbbenGabben

0

Вам нужно добавить итерацию или рекурсию. Поскольку это Java, было бы разумнее использовать итерацию.

Это соответствует строке «go to start»; в алгоритме.

Для этого вы можете использовать петлю while, такую ​​как while(true).

0
public static void main(String[] args) { 
    process(Integer.parseInt(args[0])); 
} 

private static void process(int n) { 
    while (n != 1) { 
     if (n%2 == 0) { 
      System.out.println(n + " will be divided by 2"); 
      n = n/2; 
      System.out.println("Value is even " + n); 
     } 
     else { 
      System.out.println(n + " will be multiplied by 3 and +1"); 
      n = 3*n+1; 
      System.out.println("Value is " + n); 
     } 
    } 
    System.out.println("Value is equal to 1, closing down"); 
} 

И выход:

3 will be multiplied by 3 and +1 
Value is 10 
10 will be divided by 2 
Value is even 5 
5 will be multiplied by 3 and +1 
Value is 16 
16 will be divided by 2 
Value is even 8 
8 will be divided by 2 
Value is even 4 
4 will be divided by 2 
Value is even 2 
2 will be divided by 2 
Value is even 1 
Value is equal to 1, closing down 
Смежные вопросы