Java扫描程序无法正确存储字符串

时间:2012-10-26 04:03:01

标签: java

我正在尝试在控制台中创建一个菜单并让用户选择一个选项,出于某种原因,当我运行应用程序时,它会直接转到其他位置,绕过选项a-d。

import java.util.Scanner;

public class UserChoice {


 public static void main(String[] args) 
{
    boolean status = true;
    while (status == true)
    {
    System.out.println("");
    System.out.println("MENU");
    System.out.println("");
    System.out.println("A : String Functions");
    System.out.println("B : Simple Arithmetic Functions");
    System.out.println("C : Temperature Conversion");
    System.out.println("D : Sequences");
    System.out.println("E : Exit Application");
    System.out.println("");
    System.out.println("Please make a selection.");
            Scanner keyboard = new Scanner(System.in);
    String choice =null;
    choice = keyboard.nextLine();





    if (choice == "a" || choice == "A")
    {
        StringFunctions();
    }

    else if (choice == "b" || choice == "B")
    {
        ArithmeticFunctions();
    }

    else if (choice == "c" || choice == "C")
    {
        TemperatureConversion();
    }

    else if (choice == "d" || choice == "D")
    {
        Sequences();
    }

    else if (choice == "e" || choice == "E")
    {
        System.exit(0);
    }
    else 
    {
        System.out.println("You have entered an invalid selection, please choose again.");

    }
    }

}

2 个答案:

答案 0 :(得分:4)

所有字符串/对象比较应使用equals()方法而不是==(字符串文字除外)

if (choice.equals("a") || choice .equals( "A")){....}

将相同的更改应用于其他/ if块。

==比较引用相等性。 equals()方法检查内容是否相等。

答案 1 :(得分:0)

您可能需要确保输入至少一个字符:

   String choiceString ="";
   while(choiceString.length() <1){
         choiceString = keyboard.nextLine();
   }

完成后,您可能希望从字符串中获取第一个字符:

   char choice = choiceString.charAt(0);

现在既然您选择了char,您可以使用单引号编写条件,如下所示:

   if (choice == 'a' || choice == 'A'){
    .......
    ......

此外,如果您需要,您想要将输入的字符串的大小写更改为大写或小写,请获取char,然后使用更简单的条件,如下所示:

      char choice = choiceString.toUpperCase().charAt(0);
      if (choice == 'A'){ 
       .....
      }else if(...