java - Case 语句代码不显示在屏幕上,但符合且没有错误

标签 java string case

我正在尝试让程序根据卡号的第一位在屏幕上打印卡类型。该程序可以正常编译并运行,但它不会将卡类型声明显示到屏幕上。我确信这只是一个简单的修复,但我花了几个小时试图发现它可能是什么。我在这里缺少什么?

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

最佳答案

charAt 返回一个 char,您将其与其面值表示的 int 进行比较。即,您应该使用 '4''5,而不是 456 ''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" );
}

关于java - Case 语句代码不显示在屏幕上,但符合且没有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46617904/

相关文章:

sql-server - 当日期字段为 1/1/1900 时显示空字符串

Java ZonedDateTime 到即时转换

string - Scala:如何获得字符串的转义表示?

sql-server - 为什么在 Where 子句中使用 Case

MYSQL 对每个字母使用多个 CASE REGEXP 作为表行,并且还允许对每个所述 REGEXPied 字母进行重复/重复计算

string - 修改字符串的函数

java - Spring-MVC:调用 validator ,而不是从 Controller 内部

java - 使用 SAX 解析器解析 html

java - JPA - 从动态表名称中选择所有行

string - 在 Ada 中初始化固定长度字符串的最佳方法是什么?