2017-10-07 6 views
0

カード番号の最初の桁に基づいて画面にカードタイプを印刷するプログラムを取得しようとしています。プログラムはうまくコンパイルされ、実行されますが、カードタイプのステートメントは画面に表示されません。私はこれが単なる単純な修正だと確信していますが、私はそれが何であるかを発見しようと数時間を費やしました。私はここで何が欠けていますか?ケースステートメントコードは画面に表示されませんが、エラーなしで対応します

public static void main (String [] args) { 


    System.out.println ("Please enter your credit card number without spaces."); 
    Scanner keyIn = new Scanner (System.in); 

    long ccNum = keyIn.nextLong(); 
    String cNum = ccNum + "";  


    switch (cNum.charAt (0)) 
     { 
     case 4: 
      System.out.println ("The card is a Visa"); 
      break; 

     case 5: 
      System.out.println ("The card is a MasterCard"); 
      break; 

     case 6: 
      System.out.println ("The card is a Discover Card"); 
      break; 

     case 37: 
      System.out.println ("The card is an American Express Card"); 
      break; 
     } 
} 
+1

を参照してくださいhttp://www.asciitable.com/何の手紙4、5、6および37のための:

switch文で溶液を見てみましょうあなたが望むものです。将来の問題:デバッグを学び、 'cNum'が何であるか、' cNum.charAt(0) 'が返すものを見てください。 – luk2302

+0

この行は、longを文字列に変換するためのものです。 long ccNum = keyIn.nextLong(); 文字列cNum = ccNum + ""; –

+0

これはうまくいかない理由はありますか? –

答えて

0

カード番号とあなたのケースを比較したい場合は、 cNum.charAt (0))intに変換する必要があります。しかし、どうすればケース37 ??

public static void main (String [] args) { 


    System.out.println ("Please enter your credit card number without spaces."); 
    Scanner keyIn = new Scanner (System.in); 

    long ccNum = keyIn.nextLong(); 
    String cNum = ccNum + "";  


    switch (Character.getNumericValue(cNum.charAt (0))) 
     { 
     case 4: 
      System.out.println ("The card is a Visa"); 
      break; 

     case 5: 
      System.out.println ("The card is a MasterCard"); 
      break; 

     case 6: 
      System.out.println ("The card is a Discover Card"); 
      break; 

     case 37: 
      System.out.println ("The card is an American Express Card"); 
      break; 
     } 
} 
+0

このコードの使用方法は、ケース3のように動作します。私はちょうど完全なコードに戻して、壮大に働きました –

1

charAtcharを返し、あなたはその額面が表すintにそれを比較しています。つまり、4の代わりに56の代わりに'4','5'および'6'を使用してください。また、 "37"は2文字なので、最初の文字だけを評価することはできません。あなたは、整数と文字を比較している

if (cNum.startsWith("4")) { 
    System.out.println ("The card is a Visa"); 
} else if (cNum.startsWith("5")) { 
    System.out.println ("The card is a MasterCard"); 
} else if (cNum.startsWith("6")) { 
    System.out.println ("The card is a Discover Card"); 
} else if (cNum.startsWith("37")) { 
    System.out.println ("The card is an American Express Card"); 
} 
+0

はい。それが事です。ありがとう。私はそれがそれのような単純なものでなければならないことを知っていた。 –

1

:代わりに、String.startsWith(String)と、一連のif-else条件を使用することができます。 、私は疑う参照

public static void main (String [] args) { 

    System.out.println("Please enter your credit card number without spaces."); 
    final Scanner keyIn = new Scanner(System.in); 

    long ccNum = 0L; 

    if (keyIn.hasNext()) { 
     ccNum = keyIn.nextLong(); 
    } 

    final String cNum = "" + ccNum; 

    int firstDigits = Integer.parseInt(cNum.substring(0, 2)); 

    if (firstDigits > 37) { 
     firstDigits /= 10; 
    } 

    switch(firstDigits) { 
     case 4: { 
      System.out.println("The card is a Visa"); 
      break; 
     } 
     case 5: { 
      System.out.println("The card is a MasterCard"); 
      break; 
     } 
     case 6: { 
      System.out.println("The card is a Discover Card"); 
      break; 
     } 
     case 37: { 
      System.out.println("The card is an American Express Card"); 
      break; 
     } 
     default: { 
      System.out.println("Incorrect card number"); 
     } 
    } 
} 
関連する問題