2017-10-07 22 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是指,我懷疑是你想要的。對於未來的問題:學習調試,看看'cNum'是什麼以及'cNum.charAt(0)'返回的是什麼。 – luk2302

+0

此行旨在將long轉換爲字符串。 long ccNum = keyIn.nextLong(); String 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

charAt返回char,和你比較它與它的面值代表INT。即,代替4,56,應該使用'4','5''6'。另外,請注意「37」是兩個字符,因此您不能只評估第一個字符。相反,你可以使用String.startsWith(String)等一系列的if-else條件:

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

您與整數比較字符。

看看與switch語句中的解決方案:

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"); 
     } 
    } 
}