2017-02-10 1 views
-1
if (!pos[1].equals("")) { 
    String name = pos[1]; 
    System.out.println(name); 
    int p = 0; 
    for (int i = name.length() - 1; i>0; i--){ 
     if (name.charAt(i)==' ') { 
      p = i; 
      break; 
     } 
     System.out.println(p); 
     rank[1] = Integer.parseInt(name.substring(p).trim()); 
    } 
} 

int型のPは、IFブロック内Iとして設定されている場合。ただし、ifブロックの外側にアクセスすると、値はのままで、if条件にはiの値は設定されません。ifブロックの変数の値を設定します。アクセス値は、外部ブロックコードで

+1

'p'が' if'ブロックの外にある変数であると仮定されている場合、 'if'ブロックの中で宣言するべきではありません。 – khelwood

+2

私は、最も可能性の高いシナリオは、 'if'ブロックが入力されていないということです(あるいは、' i = 0'のときに起こるでしょう)スコープの問題は、このような不正なフォーマットではデバッグが非常に難しく、 'if'ブロック内にあるものやそのための' for'ループを知ることは容易ではありません。 'if'ブロックと' if'ブロックの後にのみ 'p'をループ内で印刷している場合、それは決して変更されません。 –

+0

より長い名前のために値' 0'を持つ複数の行がありますか? _every_ 'i'のために' p'を出力し、おそらく例外を引き起こす 'Integer.parseInt(...)'を呼び出します(_first_文字はスペースではないと仮定します)。 _after_は内部ではなくループです。 – Thomas

答えて

2

0以外の値に設定されている場合は、pを印刷しないでください。あなたが値を設定し、ループから抜け出すブロックを入力して、あなたがブロックを入力しない場合にのみ、あなたが値を印刷する場合

if(name.charAt(i)==' '){ 
    p= i; 
    break; 
} 

は、それゆえpはまだ0です。

関連する問題