如果用户输入不符合条件,return 消息

If user input doesn't meet conditions, return message

所以我真的是 Java 的新手,我想做的是让用户输入一个关键字,该关键字将传递给不同的条件。如果关键字以"c"开头,就会执行cmethod。如果关键字以"n"开头,就会执行nmethod。 问题是,如果用户没有输入以 "c" 或 "n" 开头的内容,我还想显示一条消息。这是我能够想通的(我知道这段代码不会起作用)

    public static void main(String[] args) {
    System.out.println("This program can randomize characters or numbers.");
    System.out.println("Please input \"c\" for characters, and \"n\" for numbers. ");
    Scanner choices = new Scanner(System.in);

    if (choices.next().startsWith("c")) {
        cmethod();
    }

    else {
        nmethod();
    }

    //how do I execute the code below if none of the conditions are met?
    else {
        System.out.println("Keyword is wrong.");
    }
}

编辑: 尝试使用 else if,但随后要执行 nmethod(),用户必须输入 "n" 两次。

else关键字正是您所需要的。你应该用什么来解决你的问题是else if。为避免读取 if 之间的另一个输入,只需将 choices.next() 存储在一个变量中,然后在 ifs 语句中调用此变量。

String entry = choices.next();
if (entry.startsWith("c")) {
    cmethod();
}
else if (entry.startsWith("n")) {
    nmethod();
}
else {
    // default behaviour if wrong entry
}

仅当输入不是'c'而为'n'时才会调用nmethod(),如果满足其中的none,则进入else部分。

您必须将 next() 提取到一个变量。如果您不这样做,next() 将始终 return 当前关键字并转到下一个关键字。 此外,如果要检查另一个关键字,则必须使用 else if

public static void main(String[] args) {
    System.out.println("This program can randomize characters or numbers.");
    System.out.println("Please input \"c\" for characters, and \"n\" for numbers. ");
    Scanner choices = new Scanner(System.in);

    String keyword = choices.next();

    if (keyword.startsWith("c")) {
        cmethod();
    } else if (keyword.startsWith("n")) {
        nmethod();
    } else {
        System.out.println("Keyword is wrong.");
    }
}

即使您在此处提供了一些可行的解决方案,但没有人谈论真正简单的 switch 语句似乎很奇怪。

基本上:

public static void main(String[] args) {
    System.out.println("This program can randomize characters or numbers.");
    System.out.println("Please input \"c\" for characters, and \"n\" for numbers. ");
    Scanner choices = new Scanner(System.in);

    switch(choices.next().charAt(0)) {
        case 'c':
            cmethod();
            break;
        case 'n':
            nmethod();
            break;
        default:
            System.out.println("Keyword is wrong.");
    }
}

这与其他答案有关 next() 函数仅计算一次这一事实。

在可以传递方法名的地方使用反射,如果方法存在就会找到它,否则会抛出异常,在你可以显示消息的地方。

java.lang.reflect.Method method;
try {
     method = this.getClass().getMethod(methodName, param1.class, 
 param2.class, ..);
 } catch (SecurityException e) { ... }
catch (NoSuchMethodException e) { ... }

尝试在下面的测试示例中输入正确和错误的方法名称的示例。

public class Test {

public static void main(String[] args) {

    Object obj = new Test();

    java.lang.reflect.Method method;
    try {
        method = obj.getClass().getMethod("tryone1");
        System.out.println("Found");
    } catch (SecurityException e) {
        System.out.println(" SecurityException Found");
    } catch (NoSuchMethodException e) {
        System.out.println("Not Found");
    }

}

public void tryone() {
    // TODO Auto-generated method stub

}

public void trytwo() {
    // TODO Auto-generated method stub

}

}

请根据您的需要自定义上述示例。例如,如果 c 作为参数出现,则 String methodname= arg[0]+"method" 并在 getMethod("tryone1") 方法中作为方法参数名称传递。

尝试:

public static void main(String[] args) {
    System.out.println("This program can randomize characters or numbers.");
    System.out.println("Please input \"c\" for characters, and \"n\" for numbers. ");
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    try{
    String s = br.readLine();
    if (s.startsWith("c")) {
        System.out.println("c");
        System.exit(1);
    }
    if (s.startsWith("n")){
        System.out.println("n");
        System.exit(1);
    }else {
    System.out.println("Keyword is wrong.");
    }
    }catch(Exception e){
        e.printStackTrace();
    }
}

对我有用,希望对你有用。

另一种方法:使用 switch-case

String s =choices.next();
char first = s.charAt(0);

switch(first){
  case 'c': cmethod(); break;
  case 'n':nmethod(); break;
  default : System.out.println("Keyword is wrong.");
}