私はCollatz問題にリンクしているタスクを解決しています。長さが最も長いArrayListを比較して見つける
public static void sequence(int value)
{
ArrayList<Integer> calc = new ArrayList<Integer>();
calc.add(value);
while(value != 1)
{
if(value % 2 == 0)
{
value = value/2;
}
else if(value % 2 != 0)
{
value = (value * 3) + 1;
}
calc.add(value);
if(value == 1)
{
System.out.println(calc);
}
}
}
public static void main(String[] args) {
for(int x = 1000000; x > 0; x--)
{
sequence(x);
}
}
}
私のタスクの次の部分は、1,000,000以下の最長このCollatzシーケンスを見つける方法を見つけることです:私は、任意の開始番号から1を生産する方法を作成しました。
私は以下のようないくつかのソリューションを思いつきました。もちろん、どれも働いていませんでした。
while(value != 1)
{
if(value % 2 == 0)
{
value = value/2;
}
else if(value % 2 != 0)
{
value = (value * 3) + 1;
}
calc1.add(value);
if(calc1.size() > calc2.size())
{
calc2 = calc1;
}
}
System.out.println(calc2);
}
誰もが助け、2つの以上のArrayListの比較を使用して最長のこのCollatzシーケンスを見つけるための正しい方法を見つけることに私を案内してもらえます。 ArrayListを使用するよりも優れたオプションがある場合は、これらのメソッドを歓迎します。おかげさまで
メソッド 'calc'と変数' calc'( 'calc'という名前はベストではありません)を持つのは混乱します。 –
@ C-Otto重複を指摘してくれてありがとう、私は気づいていない。そして、ArrayListの名前calcについては、これの問題は何ですか? –
まず、「計算」または「計算された」の略語です。短くする必要はないので、省略しないでください。そして、この名前は計算されたものを示しません。 'calculateCollatz'や' computeCollatzList'や 'collatzSequence'のような名前は、意味を伝えて他の人がコードを理解できるようにするよりも、より良い名前かもしれないと思います。 –