我试图理解给出的答案,但我不明白为什么答案是" Hello World"希望有人解释。
public class TestClass{
public static int getSwitch(String str){
return (int) Math.round( Double.parseDouble(str.substring(1, str.length()-1)) );
}
public static void main(String args []){
switch(getSwitch(args[0])){
case 0 : System.out.print("Hello ");
case 1 : System.out.print("World"); break;
default : System.out.print("Good Bye");
}
}
}
如果使用命令行运行上述代码将打印什么:java TestClass --0.50
(0之前有两个缺点。)
答案 0 :(得分:1)
parseDouble(String s)
返回一个初始化为由指定String表示的值的新double,由double类的valueOf方法执行。
所以改变你的代码:
public static int getSwitch(String str){
return (int) Math.round( Double.parseDouble(str.substring(1, str.length()-1)));
}
使用:
public static long getSwitch(String str){
return Math.round(Double.parseDouble(str));
}
因为round(double)返回long JavaDocs Math Round
圆形(双a)返回与参数最接近的长度,并将关系向上舍入。
然后将main替换为:
public static void main(String args []){
switch(getSwitch(args[0])){
case 0 : System.out.print("Hello");
break;
case 1 : System.out.print("World");
break;
default : System.out.print("Good Bye");
break;
}
}
如果您使用0
运行课程,则会打印Hello
并使用1
打印World
,默认操作会根据{{3}打印Good Bye
}
默认部分处理未显式处理的所有值 其中一个案例部分。
答案 1 :(得分:1)
public static int getSwitch(String str) { // str = "--0.50"
String x = str.substring(1, str.length()-1); // x = "-0.5"
double y = Double.parseDouble(x); // y = -0.5
long z = Math.round(y); // z = 0 (ties rounding to positive infinity)
return (int) z; // returns 0
}
public static void main(String[] args) {
switch (getSwitch("--0.50")) {
case 0: System.out.print("Hello "); // executed because getSwitch returned 0
case 1: System.out.print("World"); break; // executed because case 0 didn't end with a break
default: System.out.print("Good Bye"); // not executed because case 1 did end with a break
}
}
答案 2 :(得分:0)
您的代码已经将答案作为评论。
如果使用命令行运行上述代码将打印什么:
java TestClass --0.50
(0之前有两个缺点。)
这意味着如果您通过命令行运行代码并传递所述参数,那么它将被存储在位置0的String[] args
中,因为它是您唯一的第一个参数。
之后,您的算法会测试字符串并尝试将其转换为double
,然后会在switch case
中对其进行测试。