2017-04-23 21 views
0

私の目的は、ユーザーが何を入力するかを取得し、配列 "info"に格納し、info [0]を大文字に変換することです。しかし、コードをコンパイルすると、 "info [0] = info [0]。toUpperCase();"という行に常にスレッド "main" java.lang.NullPointerExceptionの例外メッセージが表示されます。しかし、私は完全にこの例外を引き起こす原因がわからない。誰かが私に原因を教えてもらえれば、それは素晴らしいことだろう。ありがとうございました!NullPointerException文字列の配列

 public static void main(String[] args) 
     {   
      Scanner userScan = new Scanner(System.in); 
      String keyboard = userScan.nextLine(); 
      StringTokenizer tokens = new StringTokenizer(keyboard, " "); 
      String[] info= new String[4]; 

      for(int i=0; tokens.hasMoreTokens(); i++) 
      { 
       info[i] = tokens.nextToken(); 
      } 
      info[0]=info[0].toUpperCase(); 

      //other codes... 

     } 
+0

最初にEnterキーを押すと、入力はnullになります。これを除いて、コードは正常に動作しています。 – shourav

答えて

0

あなたが任意のトークンなしでコードを実行しようとすると、それは、forループをスキップし、

info[0].toUpperCase(); 

を実行しようとする。しかし、forループとなっているので、スキップされた情報オブジェクトに初期化されますヌル。

このようにアクセスしようとすると、Null Pointer Exceptionが発生します。

これを回避するために、forループ内で変換を移動するだけです。

for(int i=0; tokens.hasMoreTokens(); i++){ 
     info[i] = tokens.nextToken(); 
     //converts only when value exists 
     info[i]=info[i].toUpperCase(); 
    }