2016-10-07 8 views
1

(私は1ヶ月以内に自分でJavaを勉強したことに留意してください)文字列インデックスが範囲外です - これはなぜ発生しますか?

私はあなたにプログラムに与えた名前の最後の文字を伝えるプログラムを作ろうとしています。しかし、私はしたいと思い、私もこれが1で、文字列の長さを減算することによって行うことができる知っている1

import java.util.Scanner; 


public class LastCharacter { 


public static void main(String[] args) { 
    Scanner reader = new Scanner(System.in); 
    System.out.println("hey"); 
    String name = reader.nextLine(); 
    lastChar(name); 
} 

public static char lastChar(String text) { 
    char lastChar = '\0';; 
    int i = 0; 
    for (i = 0; i <= text.length(); i++) { 
     lastChar = text.charAt(i); 

    } 
    System.out.println(lastChar); 
    return lastChar; 
} 

}

Error: 
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 4 
at java.lang.String.charAt(String.java:658) 
at LastCharacter.lastChar(LastCharacter.java:19) 
at LastCharacter.main(LastCharacter.java:11) 

のJava結果:ここに私のコードですなぜこのメソッドが動作していないかを知ってください。私はこれをどのように言いたいのかわからないが、文字列と文字はうまくいかないのだろうか? (plsは私を楽しまないでください)

ありがとう!

答えて

6

Java文字列は、ベースインデックス0で始まります。したがって、次の行は、for (i = 0; i <= text.length(); i++) {が存在しないインデックスにアクセスしようとしています。文字列mainは0から3にしかなりません。したがって、インデックス4にアクセスしようとすると、範囲外のエラーが発生します。これにより for (i = 0; i <= text.length(); i++) {

for (i = 0; i < text.length(); i++) {は、問題を修正する

は、この行を置き換えます。

+0

この答えは、文字列が0に基づいている理由と、インデックス文字列[strlength]を持たない文字列につながる理由の説明によって改善されます。ありがとう@ nhouser9。 – nhouser9

+0

いい視点ね。私はレスポンスを更新します。 –

0

あなたは範囲外です!条件は次のようになります I < text.length()

for (i = 0; i < text.length(); i++) { 
    lastChar = text.charAt(i); 

} 
2

Javaは、文字列の0インデックス配列を使用するため、問題があります。つまり、forループi <= text.length()は最後の文字+1になります。 "ジョー"

J = 0、 O = 1、 E = 2

ような名前の "ジョー" の長さは3であり、そのループインデックスに進む(3)の外であります文字配列の境界

0

文字列は0であることを意味します。文字列 "mom"の場合、0番目のインデックスは "m"、1番目のインデックスは "o"、2番目のインデックスは "m"です。つまり、この文字列の長さは3ですが、この文字列には3番目のインデックスがありません。それに基づいて、ループは次のようになります:

for (i = 0; i < text.length(); i++) { 
    lastChar = text.charAt(i); 
} 

しかし、ループを一切持たないより良い方法があります。各文字をループすることなく、文字列の最後のインデックスで文字を取得することができます。

lastChar = text.charAt(text.length() - 1); 
1

ここで注意取るために、2つの事柄:それはefficentそれほど複雑でより多くのであるJavaのStringクラスの長さ()メソッド

1)文字列

の文字数を返します。

2。)Javaの配列名の文字列の最後の文字を得ることのあなたのタスクを達成するために、だから、ゼロベースのインデックス

を使用しています。

public static char lastChar(String text) { 
    int textLength = text.length(); 
    char lastChar = text.charAt(textLength - 1); //first char starts from index 0 
    return lastChar; 
} 

はそれがお役に立てば幸いです。

関連する問題