对于我的类(class),我必须编写一个程序,我们必须从任意数字创建冰雹序列 (冰雹是一种数学理论,如果你将偶数除以 2,将奇数乘以 3,然后加 1,那么你最终会得到无穷无尽的模式 4,2,1,4,2,1)
我的提示是程序到达4,2,1,4,2,1这两个序列后就切断。目前我的代码正在运行,我可以按照该模式的一个序列将其切断。但是,我很难找到一个循环来最终停止它。我的问题是,我是否设置了代码,以便我无法捕获第二个序列?
代码:
Scanner inData = new Scanner(new File("test.txt"));
ArrayList<Integer> list= new ArrayList<Integer>();
while(inData.hasNext())
{
int num=inData.nextInt();
int var=list.size();
list.add(num);
while(num>1)
{
if(num%2==0)
{
num/=2;
list.add(num);
}
else
{
num=(num*3)+1;
list.add(num);
}
}
System.out.print(list);
}
}
文本输入为 10 的输出应为: [10, 5, 16, 8, 4, 2, 1, 4, 2, 1] 现在: [10, 5, 16, 8, 4, 2, 1]
最佳答案
我建议编写一个当列表以 4,2,1,4,2,1 结尾时返回 true 的方法:
private boolean finished(List<Integer> list) {
int len = list.length();
// check for minimum of 6 entries
if(len < 6) {
return false;
}
return list.get(len-1) == 1
&& list.get(len-2) == 2
&& list.get(len-3) == 4
&& list.get(len-4) == 1
&& list.get(len-5) == 2
&& list.get(len-6) == 4;
}
然后将 while 循环更改为:
while(num>1 && !finished(list)) {
关于java - 结束冰雹序列 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27956092/