Java类型基础知识

时间:2015-09-12 11:14:10

标签: java

我试图理解给出的答案,但我不明白为什么答案是" 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之前有两个缺点。)

3 个答案:

答案 0 :(得分:1)

根据JavaDocs Double

  

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中对其进行测试。