java - 结束冰雹序列 (Java)

标签 java arraylist

对于我的类(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/

相关文章:

java - 即使在以编程方式设置日期时分离监听器,JDateChooser 上的 propertychangelistener 也会额外触发 2 次

java - Android-以编程方式发送彩信而不是默认应用程序

java - 如何在java中使用正则表达式替换字符串中的字符?

java - 如何获取 Arraylist 内的 Hashmap 值

java - 使用 HttpClient 发布 Base64 编码的视频文件

java - 我无法向用户显示输出

Java ArrayLists : Adding parent class and sub class to the same arraylist,解决方案

Java 将文件中对象的序列化读取到 arrayList 中

java - 如何将 ArrayList 内的对象中的值设为 "edit"?

java - Java中如何将Arraylist的内容写入xml文件