如果用户输入不符合条件,则返回消息

时间:2017-05-29 09:27:19

标签: java if-statement next

所以我对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”两次。

6 个答案:

答案 0 :(得分:3)

您必须将next()提取到变量中。如果您不这样做,next()将始终返回当前关键字并转到下一个关键字。 此外,如果要检查其他关键字,则必须使用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.");
    }
}

答案 1 :(得分:2)

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

if

只有在输入不是' c'时才会调用nmethod()。并且是' n'如果没有满足这些条件,它将进入String entry = choices.next(); if (entry.startsWith("c")) { cmethod(); } else if (entry.startsWith("n")) { nmethod(); } else { // default behaviour if wrong entry } 部分。

答案 2 :(得分:1)

即使你在这里提供了一些有效的解决方案,但没有人谈到真正简单的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()函数仅评估一次的事实相结合。

答案 3 :(得分:1)

另一种方法:使用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.");
}

答案 4 :(得分:0)

使用反射,你可以传递方法名称,如果存在方法,那么它将被发现,否则它会抛出异常,你可以显示消息。

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")方法中作为方法参数名称传递。

答案 5 :(得分:0)

尝试:

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

为我工作,希望它能为你做到。