2017-11-26 15 views
-1

学校のプロジェクトとして、入力した名前の頭文字を表示するように求められました(たとえば.for Akshat Abhay ShetyeはA. A. Shetyeを表示します)。私はそれを実行すると:(範囲外の文字列インデックスStringIndexOutOfBoundsExceptionを)古いBlueJのとJavaを実行しますが、エラーがスローされます。これは、私の学校のPC上で正常に動作文字列インデックスcharAtの範囲外

。 これは私のプログラムです:

import java.util.*; 
import java.lang.*; 
public class dispInitials{ 
    public static void main (String args[]){ 
     Scanner sc = new Scanner(System.in); 
     System.out.println("Enter your full name"); 
     String name = sc.next(); 
     //name = name.trim(); 
     String inName= name.charAt(0)+". "; 
     int i = 1; 
     for(i=1;i<(name.length()-1);i++){ 
      if(Character.isWhitespace(name.charAt(i))) 
      break; 
     } 
     i++; 
     inName=inName+name.charAt(i)+". "; 
     for(i=i;i<name.length();i++){ 
      if(Character.isWhitespace(name.charAt(i))) 
      break; 
     } 
     i++; 
     System.out.println("The name is "+inName); 
    } 
} 

誰もが(ライン16で)エラーを説明できますか?

+3

'私は= i'はタイプミスでなければなりません。 – Eran

答えて

0

エラーがあなたの名前の入力です。

は、このコードを使用して入力行を置き換えます

String name = sc.nextLine(); 
+0

は、この問題を解決するように見えました。しかし、なぜそうですか?String name = sc.next(); - 動作しませんか? –

+0

「Akshat Abhay Shetye」があなたの意見だったから。 sc.next()はあなたの入力から 'Akshat'のみを取得し、 'Abhay Shetye'は無駄になります(sc.next()が再び呼び出されるまで)。 私はそれはあなたの混乱をクリア願っていますか? –

+0

しかし、なぜそれは古いBlueJとJava(私の学校のPC)で動作するのですか? –

4
for(i=1;i<(name.length()-1);i++) 

だから、ループが停止したとき、iはその後、あなたが

i++; 
inName = inName+name.charAt(i)+". "; 

をやっているので、あなたはインデックスname.lengthで文字にアクセスしようとしているname.length - 1

に等しいです。しかし、そのようなインデックスはありません。最後の有効なインデックスはname.length - 1です。したがって、例外。

あなたは、デバッガを使用して、道に沿って、変数の値を調べ、線でコード行をステップ実行することを学ぶ必要があります。あるいは、少なくともあなたの問題を診断するためのコードでSystem.out.println()指示を追加します。これは基本的に開発者の毎日の仕事です。

関連する問題