Здравствуйте, я пытаюсь выполнить последовательность градиента.
Последовательность градиента в основном: возьмите заданное целое число n - если четное, следующее целое число в последовательности равно n/2, если нечетное, следующее целое число в последовательности равно n * 3 + 1.
API, которому я должен следовать для моего задания требуется, чтобы он выполнялся так же, как и с методом, возвращающим arraylist.
Моя проблема в том, что код просто висит навсегда, когда я добавил вывод в самом методе, чтобы увидеть, что происходит. Я вижу, что он всегда зависает, когда ему почему-то дают номер 10.
Я надеюсь, что здесь есть что-то маленькое, возможно, в моих условиях.Последовательность Hailstone в Java с ArrayList
Вот пример вывода, когда значение n равно 15, оно выводит это снова и снова.
15 нечетно, поэтому я сделать его 3n + 1: 46
46 даже таким образом я разделить на 2: 23
23 нечетно, поэтому я сделать его 3n + 1: 70
70 даже таким образом я разделить от 2: 35
35 нечетно, поэтому я сделать его 3n + 1: 106
106 даже таким образом я разделить на 2: 53
53 нечетно, так что я сделать это 3n + 1: 160
160 даже так Я деляю на 2: 80
80 даже в этом случае я делясь на 2: 40
40 даже я делю на 2: 20 20 даже так я делю на 2: 10
15 нечетно, так что я сделать это 3n + 1: 46
Мой код
import java.util.ArrayList;
import java.util.Scanner;
public class HailstoneSequence {
public static ArrayList<Integer> getHailstoneSequence(int n){
ArrayList<Integer> results;
results = new ArrayList<Integer>();
results.add(n);
//while the last number is not 1 perform these actions
while((results.size() - 1) != 1){
//for each number in the array
for(int i=0; i< results.get(i); i++){
//test if odd or even
if((results.get(i)%2)==0){
System.out.println(results.get(i)+" is even so I divide by 2: "+ (results.get(i)/2));
results.add((results.get(i)/2));
}
else{
//odd
System.out.println(results.get(i)+" is odd so I make it 3n+1: "+ (3*(results.get(i))+1));
results.add((3*(results.get(i))+1));
}
}
}
return results;
}
public static void main(String[] args) {
int n=0;
Scanner sc = new Scanner(System.in);
System.out.println("Enter the value of n ");
n=sc.nextInt();
sc.close();
//create an initialize new array list to hold results of the hailstonesequence
ArrayList<Integer> list;
list = new ArrayList<Integer>();
list = getHailstoneSequence(n);
//for each number in the array
for(int i=0; i< list.get(i); i++){
if ((list.get(i)!= 1)){
if((list.get(i)%2)==0){
System.out.println(list.get(i)+" is even so I divide by 2: "+ (list.get(i+1)));
}
else{
//odd
System.out.println(list.get(i)+" is odd so I make it 3n+1: "+ (list.get(i+1)));
}
}
else{break;}
}
}
}
Может он висит навсегда, потому что это то, что алгоритм делает на определенном входе? –
Вы прошли через код в своем отладчике IDE? Это место для начала. Пожалуйста, посетите [help] и прочитайте [ask] –
. Какова цель цикла for после вызова 'getHailstoneSequence'? –