所以我对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”两次。
答案 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();
}
}
为我工作,希望它能为你做到。