2017-08-16 7 views
1

私はサイズNの配列Aを持っています。私は整数S、E、Iを持っています。インデックスSからEまでのすべての配列要素をIだけインクリメントする必要があります。配列の要素を特定の間隔で一定量増加させます。 Java

SとEの値は論理的に正しい

私の試み:

for(int i=S; i<=E; i++) 
{ 
A[i]=A[i]+I; 
} 

同じことを行うためのより高速な方法はありますか?

+0

「E」が「A.length-1」よりも小さいことを確認していることを前提としています。 –

+2

いいえ、そうではないと思うのはなぜですか? – alfasin

+0

"同じことを行うより速い方法がありますか?"いいえ、それはそれが得られるほど速いです。 (John3136が言っているように、 'A [i] + = I' **を使用すると分数差が出るかもしれませんが、ベンチマークして調べる必要があります) –

答えて

1

いいえ、あなたのアプローチは正しいです。あなたはA[i] += Iを行うことができますがSまたはEがNよりも大きい場合は、「桁違い」によってそれをスピードアップするためにあなたは何のエラーを確実にしないされていません

+0

のJAVAは 'A [i] + = I'は本当に' A [i] = A [i] + I'よりも速いですか? –

+0

@ ScaryWombat私はそうではないと思います。少なくとも、多くの場合、基になるバイトコードは同一であると思います。 –

+0

@ScaryWombatはおそらくそうではありません。しかし、私は68Kアセンブリを覚えていて、 '++ 'がCでコンパイルされていて、' INC'バージョンよりも2サイクル早い特定の 'INC'オペコードにコンパイルされているので、それを習慣と呼んでいます;-) – John3136

1

を作ることができる変更はありません

私はどうしたら:

for (int i=S; i<=E && i<N; i++) { 
    A[i] += I; 
} 

Eが含まれているとまた、(ループを終了する条件に、=の話)、あなたはSとEの間の要素に関心を持っていることを確認してください。

それ以外にも、私はより速いという面では良い選択肢はありません。

+1

OPのコメントによると、これらのチェックが行われていることを前提とします。 –

+1

このようにすれば、Sが0より大きいか、Aがヌルでないことを確認してください。それは通常、正しいことではありません。メソッドが明確な前提条件を持っている場合、呼び出し側はメソッドを尊重する必要があります。呼び出し元がこれらの前提条件を守らずに例外を取得した場合、無効な引数を静かに受け入れるのではなく、呼び出し元コードを修正する必要があります。 –

+0

私はこれらのコメントに答え始めた時点ではありません:)。 –

関連する問題