2017-02-21 8 views
1

プログラムは感謝(名前)を印刷していません。代わりに、ラインは完全にスキップされてメインメニューに戻ります。誰かが理由を説明できますか?表示されたインデックスに基づいて新しい文字列を作成し、結果を 'firstName'に格納してから「Thanks(name)!」として出力する必要があります。私のprintlnが動作しないのはなぜですか?

public static void main(String[] args) { 

    Scanner in = new Scanner(System.in); 

    String[] custInfo = new String[20]; 

    String MANAGERID = "ABC 132"; 
    String userInput; 
    String cust = "Customer"; 
    String pts = "Print to screen"; 
    String exit = "Exit"; 
    int counter = 0; 
    int full = 21; 
    boolean cont = true; 

    while(cont) { 

     System.out.println("Enter the word \"Customer\" if you are a customer or your ID if you are a manager."); 
     userInput = in.nextLine(); 

     if (userInput.equalsIgnoreCase(exit)) { 
      System.out.println("Bye!"); 
      System.exit(0); 
     } 

     try { 
      if (userInput.equalsIgnoreCase(cust)) { 
       System.out.println("Hello, please enter your name and DoB in name MM/DD/YYYY format."); 
       custInfo[counter] = in.nextLine(); 
       String firstName=custInfo[counter].substring(0,(' ')); 
       System.out.println("Thanks "+firstName+"!"); 
       counter++; 
      } 

      if (counter==full) { 
       System.out.println("Sorry, no more customers."); 
      } 
     } catch(IndexOutOfBoundsException e) { 
     } 
    } 
} 
+2

サブストリング(0、( '')) 'とは何でしょうか? –

+1

try/catchを削除するか、キャッチしたエラーメッセージを表示してください。問題が表示されると思います。 – JBC

+1

'文字列未処理= custInfo [カウンタ]' '文字列firstName = unprocessed.substring(0、unprocessed.indexOf( '')); ' おそらく役に立ちます。 – marcushobson

答えて

4

あなたのコードは、以下の行にIndexOutOfBoundsExceptionを生成し、例外ハンドラのコードにジャンプされます。

String firstName=custInfo[counter].substring(0,(' ')); 

String.substring過負荷と二つの定義有する:Javaでは

substring(int startIndex) 
substring(int startIndex, int endIndex) 

charデータ・タイプは、単に背後16ビット数です。 ' '(空白)を32に変換し、それより短い任意の文字列でエラーになります(推定カウンタが有効なインデックスを指していると仮定)。

+0

カウンタが有効なインデックスを指している必要があります。これはとても役に立ちましたが、ありがとうございました! – Chez

+0

私はここで何をしようとしているのか正しいコードの例を提供しますか?私はまだJavaにはまだ初心者であり、あなたの答えの意味を完全に理解するのは苦労しています。 – Chez

+0

あなたが期待しているフォーマットに基づいて、splitはあなたが探している機能を提供しているようです。 Splitは文字列を受け取り、あなたが提供する任意の文字または正規表現で文字列配列を返します。以下は、あなたがしようとしているもののために働くはずです(先行スペースがない場合)。 文字列firstName = custInfo [counter] .split( "")[0]; – HedonicHedgehog

1

代わりにcustInfo[counter].indexOf(" ")を使用して、名前とDoBの間のスペースのインデックスを取得します。

String firstName = custInfo[counter].substring(0, custInfo[counter].indexOf(" ")); 
+0

こんにちは、お時間をいただきありがとうございます。私はこれを試して、それを働かせることができませんでした。それは同じことをして、コードを実行したが、印刷ラインを無視した。 – Chez

関連する問題