클래스에 대한 나의 과제는 양의 정수 n으로 시작하여 1로 끝나는 Hailstone 시퀀스로 구성된 문자열을 반환하는 문자열을 반환하는 것입니다. 문자열은 일련의 숫자로 구성되어야하며 각 숫자 뒤에 단일 공백이옵니다. 시퀀스에 숫자 m (1 이외)이 나타나면 nextHailstone (m)을 따라야합니다. 예를 들어, nextHailstone (1)은 "1"을 반환하고 nextHailstone (5)는 "5 16 8 4 2 1"을 반환해야합니다.3n + 1 솔루션이 작동하지 않는 이유는 무엇입니까?
다음 코드를 가지고 있으며 무한 루프에서 멈추는 이유를 알 수 없습니다.
public static int nextHailstone (int n)
{
if (n==1)
{
return n;
}
if (n%2 == 0)
{
return n/2;
}
else
{
return ((3*n)+1);
}
}
public static String hailstones (int n)
{
String result = "";
result+=n;
result+= ' ';
while (true)
{
if (result.charAt(result.length()-2)=='1')
{
return result;
}
else
{
result +=(nextHailstone(result.charAt(result.length()-2)) + ' ');
}
}
}
테스트 케이스 :
public void testHailstones()
{
assertEquals("1 ", hailstones(1));
assertEquals("16 8 4 2 1 ", hailstones(16));
assertEquals("7 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 ", hailstones(7));
}
당신은 루프에서'때문에 경우에 박히 ((result.charAt (result.length를) - 2) == '1')'진정한 결코 – Jay