【发布时间】:2016-07-04 04:49:15
【问题描述】:
我编写了一个程序,它创建一个序列并将其存储在ArrayList:
import java.util.ArrayList;
public class JavaProject {
public static void main(String[] args) {
ArrayList sequence = new ArrayList();
int num=0;
int largest=0;
for(int i =2;i<=1000000;i++){
sequence.add(i);
while((int)sequence.get(sequence.size()-1) != 1 ){
if((int)sequence.get(sequence.size()-1) %2 ==0 ){
sequence.add( ((int)sequence.get(sequence.size()-1))/2 );
}
else{
sequence.add(3*((int)sequence.get(sequence.size()-1))+1);
}
}
if(sequence.size()> largest){
num=i;
largest=sequence.size();
}
sequence.removeAll(sequence);
}
System.out.println(num);
}
}
我尝试更改项目 xmlx 大小,但没有成功。我使用 Netbeans。
【问题讨论】:
-
你得到的确切错误是什么,你是如何运行它的?如果在 Netbeans 中,您是如何尝试更改
Xmx的?如果是命令行,你用什么命令来运行它? -
养成写这个
List<Integer> sequence = new ArrayList<Integer>();而不是ArrayList sequence = new ArrayList();的习惯。从良好的代码角度来看,您应该在声明某些内容时使用基本类型List。此外,您还需要指定您希望数据结构的通用类型,无论是整数、布尔值还是其他类型。 -
你还想做什么?你的代码在 for 循环中有一个 while 循环和一堆强制转换,这告诉我你可能把整个事情设计得很糟糕。
-
您是否检查过您的
while循环是否真的每次都终止?从我做的测试来看,它似乎在一段时间后停止了。 -
我试图将wiredniko更改为list
,但似乎也不起作用,而循环应该可以正常工作..问题是:为正整数集定义了以下迭代序列:n → n/2 (n 为偶数) n → 3n + 1 (n 为奇数) 13 → 40 → 20 → 10 → 5 → 16 → 8 → 4 → 2 → 1 可以看出这个序列(从13 并完成于 1) 包含 10 个术语。虽然尚未证明(Collatz Problem),但认为所有起始数字都以 1 结束。100 万以下的哪个起始数字产生最长的链?
标签: java