2016-06-18 6 views
0

私はしばらく立ち往生しています。私は入力した数字、空白、$ ^%## &のような特殊文字を無視する必要があります!
Img1:ちょうど..Character.isLetter&Character.isDigitを使用して数字、空白を無視し、文字列を読み取る

エラーをアドバイスしてください..私は両方の方法を使用してみましたが...、それは私のためにうまくいかなかったCharacter.isDigit & Character.isLetterを使用して、AZその他の手紙を読んで

(スペースと数字なし)通常の出力:
Img2

予想される出力は、私は123 $ @ GetLoan ...彼らは最初の数文字を無視すべきである「123 $ @を入力しても、438から5626でなければなりません'読み込みGetLoan ..

完全な質問:ユーザーに文字で表された電話番号を入力するように促し、対応する電話番号を数字で出力するプログラムを作成します。ユーザーが7文字以上を入力した場合は、最初の7文字のみを処理します。また、3桁目の後に - (ハイフン)を出力します。ユーザーは大文字と小文字の両方、および単語間のスペースの両方を使用できます。フラグメント以下

public class Question3 { 

public static void main(String[] args) { 

    String letters; 
    char phoneDigit; 

    Scanner kb = new Scanner(System.in); 

    System.out.println("Enter letters : "); 
    letters = kb.next(); 

    for (int i = 0; i < 7; i++) { 

     phoneDigit = letters.charAt(i); 

     if (Character.isLetter(phoneDigit) == true) { 

      if (i == 3) { 
       System.out.println("-"); 
      } //If 

      if (phoneDigit >= 'A' && phoneDigit <= 'C' 
        || phoneDigit >= 'a' && phoneDigit <= 'c') { 

       System.out.println("2"); 

      } else if (phoneDigit >= 'D' && phoneDigit <= 'F' 
        || phoneDigit >= 'd' && phoneDigit <= 'f') { 

       System.out.println("3"); 

      } else if (phoneDigit >= 'G' && phoneDigit <= 'I' 
        || phoneDigit >= 'g' && phoneDigit <= 'i') { 

       System.out.println("4"); 

      } else if (phoneDigit >= 'J' && phoneDigit <= 'L' 
        || phoneDigit >= 'j' && phoneDigit <= 'l') { 

       System.out.println("5"); 

      } else if (phoneDigit >= 'M' && phoneDigit <= 'O' 
        || phoneDigit >= 'm' && phoneDigit <= 'o') { 

       System.out.println("6"); 

      } else if (phoneDigit >= 'P' && phoneDigit <= 'S' 
        || phoneDigit >= 'p' && phoneDigit <= 's') { 

       System.out.println("7"); 

      } else if (phoneDigit >= 'T' && phoneDigit <= 'V' 
        || phoneDigit >= 't' && phoneDigit <= 'v') { 

       System.out.println("8"); 

      } else if (phoneDigit >= 'W' && phoneDigit <= 'Z' 
        || phoneDigit >= 'W' && phoneDigit <= 'z') { 

       System.out.println("9"); 
      } // If 
     } // If 
    } // For loop 

} //PSVM 
+1

で述べた問題を修正しました質問の説明で正常にそれを入力して、スクリーンショットを使用して、エラーメッセージを表示しないようにしてください下に行うことによって。 –

+1

また、どのように動作していないか、予想される出力は何か、入力は何かを教えてください。 –

答えて

1

おそらく問題です:

for (int i = 0; i < 7; i++) { 
    phoneDigit = letters.charAt(i); 
    if (Character.isLetter(phoneDigit) == true) { 

あなたが最初の7つの文字を取って、文字だけのものを印刷しています。入力文字列123getloanの場合、123getlを反復し、isLetter123を拒否するため、後でプログラムはgetlのみを処理します。

7文字のみを反復するには、与えられた文字が文字の場合にのみ、数字をiに変更する必要があります。

int i = 0; 
for (char phoneDigit : letters.toCharArray()) { 
    if (Character.isLetter(phoneDigit)) { 
     i++; 

     // other ifs here 

     if (i == 3) { 
      System.out.println("-"); 
     } 
    } 
    if (i >= 7) { 
     break; 
    } 
} 

EDIT:@Andreas

+0

こんにちはkrzyk、あなたの素早い返信のおかげで..本当に数字を無視していたが、それはg以降では読み込まれなかった... 123はchar0、1、2と見なされる...私は最初の文字が必要'g' ... –

+0

答えはほぼ正しいです。前半は素晴らしいですが、 'isLetter(phoneDigit)'がtrueのときに 'i'だけインクリメントすると、文字以外の文字が出現した場合はいつでもループします。ループ内で 'count'の条件付きインクリメントを使って' for(int i = 0、count = 0; i Andreas

+0

こんにちはアンドレアス、あなたの助けに感謝します。私は試して、出力はほぼ正しいです!ハイフン( - )の場合、私はIf文を入れます。(i == 3){println( " - ")}しかし1,2,3はchar 0,1,2 ..と考えています!![https: //postimg.org/image/m9x5z3bif/] –

関連する問題