本当にその長さ-1を使用する必要があるのか、少し混乱しています。それは、範囲外のエラーが発生したくない場合です。たとえば、私はこの単純な配列を作成しました。
int [] oldArray = {1, 5, 6, 10, 25, 17};
for(int i = 0; i < oldArray.length; i++){
エラーは発生しません。 -1が実際に役立つ例はありますか?前もって感謝します。
例のように、通常はforループ呼び出しでoldArray.length
を使用します。
for(int i = 0; i < oldArray.length; i++) {
//Executes from i = 0 to i = oldArray.length - 1 (inclusive)
}
i
が0
からoldArray.length - 1
までどのように移動するか、しかしoldArray.length
で正確に停止する(そして実行されない)ことに注意してください。配列は0
ではなく1
の位置から始まるため、old.Array.lengthは、i
が停止する数値に完全に適合します。代わりに、配列が1
の位置で開始された場合、forループは次のようになります。
for(int i = 1; i <= oldArray.length; i++) {
//Executes from i = 1 to i = oldArray.length (inclusive)
}
oldArray.length - 1
は通常、最後の要素にアクセスします。
int[] oldArray = {1,2,3,4,5};
int lastElement = oldArray.length - 1; // 4
oldArray[lastElement] // returns last element, 5
これは通常、length - 1
とlength
を使用する場合ですが、他にも必要な場合が多く、具体的な答えはありません。しかし、心配しないでください。コーディングを続けてください。すぐにこのコツをつかむでしょう;)
for(int i = 0; i < oldArray.length; i++)
と同等です
for(int i = 0; i <= oldArray.length - 1; i++)
ループと配列ユーティリティメソッドは、array.length
を使用して「最後の要素まで」を意味することができます。
array.length - 1
を使用するために私が考えることができる唯一の場所は、最後の要素にアクセスするときです。たとえば、配列内の最大数を見つける場合です。
int[] array;
Arrays.sort(array);
int largest = array[array.length - 1];
int [] oldArray = {1, 5, 6, 10, 25, 17};
for(int i = 0; i < oldArray.length; i++){
=>
int [] oldArray = {1, 5, 6, 10, 25, 17};
for(int i = 0; i <= oldArray.length - 1; i++){
したがって、基本的には、最後の要素にアクセスする必要があるときにoldArray.length - 1
を使用する必要があります。
配列の最後のインデックス番号を取得する場合に使用します。 -1を使用して、アレイの長さをコンピュータが認識していることを確認します。 0が開始で、-1が配列の終了であることがわかります。
ボヘミアンが書いた例のように数字を並べ替えたいときにこれを使用します。バブルソートアルゴリズムを見てください
{
int[] arr= new int[5]{23,2,3,34,6}; // unsorted data set
bubblesort(arr,5); // sorting process using bubble sort
int i;
for(i=0;i<5;i++)
Console.Write(arr[i]); //after sorting
Console.ReadLine();
}
//バブルソート
static void bubblesort(int[] dataset, int n){
int i,j;
for(i=0;i<n;i++)
for(j=n-1;j>i;j--)
if(dataset[j]<dataset[j-1])
{
int temp=dataset[j];
dataset[j]=dataset[j-1];
dataset[j-1]=temp;
}
}
}
}
あなたの質問に対する具体的な答えはありません。場合によります。 1つのポイントは、配列の最後の要素にインデックスを付ける場合です。
int lastElement = oldArray[oldArray.length-1];
簡単に言えば、配列には6つの要素がありますが、配列のインデックスは0から始まります。つまり、最初の要素のインデックスは0、2番目の要素は1、...、6番目の要素は5です。アクセスするために oldArray[6]
、エラーが発生します。あなたが示すループでは、これは決して当てはまりません:
for(int i = 0; i < oldArray.length; i++)
oldArray.length
は6を返します。ループで到達したi
の最大値は5です。これは、i
の値が6になるとループが中断するため、エラーが発生しない理由です。だからあなたの質問に直接答えるために、oldArray[oldArray.length - 1]
は、配列の最後の要素を返します。
以下のように書くこともできます:
for(int i = 0; i <= oldArray.length-1; i++){
oldArray.length-1
は、その特定の要素、つまりfinal element fromarrayが必要な場合に必要です。
つまり、oldArray[oldArray.length-1]
主なルールは、配列は0から始まることです。lengthは配列の実際の数を返しますが、したがって、長さはカウントされないか、0から始まります
以下の例では、
for(int i = 0; i < oldArray.length; i++){}
<のみを使用しているため、iは0から始まり、iの値が5になるまでループが続きます。
<=を使用しようとすると、存在しない7番目(0-6)の要素を評価しようとするため、再び失敗します。
次に、以下のような別の例を見てみましょう。ここでは、文字列を逆にしようとしています。
String name="automation";
System.out.println(name.length());
for(int i=name.length()-1;i>=0;i--) {
System.out.print(name.charAt(i));
}
出力:
10
ノイタモトゥア
上記の例では、-1を使用しない場合、値10がループ内に渡されます。これは、長さが文字列の長さに従って10を返すためですが、配列の10番目の要素は、配列が0で始まるため存在しないため、9番目まで必要です。上記の例の場合のみ、10を渡すと、10番目の位置が存在しないためエラーがスローされます。そのため、少なくともdecrimes(i--)の順序には-1を使用する必要があります。
これはあなたが何をしたいかに完全に依存します。配列には、物事のコレクションがあります。この配列[1,2,3,4]が表示された場合、小学校で誰かがそこにいくつあるかを尋ねられたら、4つと言います。あなたは1から数えるでしょう、それは完全に合理的です。誰かがその配列の3番目のものが何であるかをあなたに尋ねた場合、あなたは3を指すでしょう。ただし、コーディングしているので、配列はゼロから始まることがわかります。そのため、その配列にはまだ4つのものがありますが、それらの名前は変更されています。これで、1の名前はゼロ、2の名前は1、3の名前は2、4の名前は3になります。したがって、ループを使用していて、ループがすべてのものを通過するようにしたい場合(配列を検索している場合など)、. lengthを使用すると、実行されます。ただし、配列内の番号4に具体的にアクセスしたい場合は、4の名前は4ではなく3になります。したがって、長さ1を使用します。これは、インデックスに関しては、物理的なものに付けられた新しい名前を使用しているためです。
for (int i = 0; i < array.length; i++) {
// this will loop throw the entire array
}
配列から要素にアクセスする場合は、array.length-1を使用する必要があります
lastElement = array.length -1;