ここにこのループがあります
for(int i =0; i < prices.length; i++)
{
if(prices[i]>largest)
{
largest = prices[i];
}
else if(prices[i]<smallest)
{
smallest= prices[i];
}
}
配列全体をループし、最小値と最大値を見つけます。最初の20個の要素のみをループしたいとしますが、どうすればよいですか?私はこのforループの下にネストされたループを挿入し、それに遭遇するかどうかを確認しましたが、それができませんでした。
ループ制御条件に要件を追加するだけです。
for(int i =0; i < prices.length && i < 20; i++)
これにより、配列内で20を超える最初の20要素がチェックされますが、20項目未満の場合は配列全体がチェックされます。
5つの答えとそれらはすべてループで二重比較がありますか?
Javaプログラムの実行が非常に遅い...
このようなループを行う正しい方法は次のとおりです。
for(int i = 0, len = Math.min(prices.length, 20); i < len; i++)
長さと20の比較をループの外に移動し、ループ条件を2倍の速さで評価します。 (JITが行っていること、行っていないことを無視)
また、最初の要素で最大/最小を初期化する必要があります(または、elseが原因で配列に要素が1つしかない場合は、無効な値を取得します)。次に、ループの最初の要素をスキップして、 "もっと早く":
largest = prices[0];
smallest = prices[0];
for(int i = 1, len = Math.min(prices.length, 20); i < len; i++)
for(int i =0; i < 20 && i < prices.length; i++)
これは20回ループします。つまり、配列の最初の20要素です。
_prices.length
_をMath.min(20, prices.length)
に置き換えます。これは、配列の長さまたは20のうち、短い方です。
for(int i =0; i < Math.min(20, prices.length); i++)
Forループを次のように変更します。
for(int i =0; i < (prices.length < 20 ? prices.length : 20); i++)
{
if(prices[i]>largest)
{
largest = prices[i];
}
else if(prices[i]<smallest)
{
smallest= prices[i];
}
}
最初の20要素のみをループする場合は、forループのヘッダーで次のように言います。
for(int i =0; i < prices.length && i < 20; i++)