2016-03-04 108 views
-1

我正在做一项任务,并提出了这段代码。我拥有所有正确的公式等。我运行调试器,看到我的程序跳过了我的第一条if语句。我不知道为什么它会继续这样做。我一直在研究这个程序几个小时,并找不到解决方案。程序失败if语句

public static void main (String args[]) 
{ 
    Scanner inFile = null; //creating scanner 
    try 
    { 
     inFile = new Scanner(new File("prog435t.dat")); //reading file 
    } 
    catch (FileNotFoundException e) //if no file 
    { 
     System.out.println("File not found!"); 
     System.exit(0); 
    } 

    String [] sex = new String [12] ; 
    String[] bone = new String [12]; 
    int [] age = new int [12]; 
    double [] length = new double [12]; 

    for(int count = 0; count<12; count++) 
    { 
     sex[count] = inFile.next();   
     bone [count] = inFile.next(); 
     age [count] = inFile.nextInt(); 
     length [count] = inFile.nextDouble(); 
    } 

    double [] height = new double [12]; 

    for(int count = 0; count<12; count++) 
    { 
     if(sex[count] == "M") 
     { 
      switch(bone[count]) 
      { 
       case "F": 
          height[count] = 69.089 + 2.238 * length[count]; 
          height[count] = (int)(height[count] *1000 +.5)/1000.0; //rounding 
          break; 
       case "T": 
          height[count] = 81.688 + 2.392 * length[count]; 
          height[count] = (int)(height[count] *1000 +.5)/1000.0; //rounding 
          break; 
       case "H": 
          height[count] = 73.570 + 2.970 * length[count]; 
          height[count] = (int)(height[count] *1000 +.5)/1000.0; //rounding 
          break; 
       case "R": 
          height[count] = 80.405 + 3.650 * length[count]; 
          height[count] = (int)(height[count] *1000 +.5)/1000.0; //rounding 
          break; 
       default: 
          height[count] = 0; 
          break; 

      } 
     } 

     else 
     { 
      switch(bone[count]) 
      { 
       case "F": 
          height[count] = 61.412 + 2.317 * length[count]; 
          height[count] = (int)(height[count] *1000 +.5)/1000.0; //rounding 
          break; 
       case "T": 
          height[count] = 72.572 + 2.533 * length[count]; 
          height[count] = (int)(height[count] *1000 +.5)/1000.0; //rounding 
          break; 
       case "H": 
          height[count] = 64.977 + 3.144 * length[count]; 
          height[count] = (int)(height[count] *1000 +.5)/1000.0; //rounding 
          break; 
       case "R": 
          height[count] = 73.502 + 3.876 * length[count]; 
          height[count] = (int)(height[count] *1000 +.5)/1000.0; //rounding 
          break; 
       default: 
          height[count] = 0; 
          break;         
      } 
     } 

     if(age[count] >30) 
     { 
      double newAge = age[count]-30; 

      height[count] = height[count] - (0.06*newAge); 
     } 


    } 

    for(int count = 0; count < 12; count++) 
    { 

    } 

    System.out.println("Sex\tBone\tAge\tLength\t Height\n"); 
    for(int count = 0; count<12; count++) 
    { 
     System.out.print(sex[count] + "\t" + bone[count] + "\t" + age[count] + "\t" + length[count] + "\t " + height[count] +"\n"); 
    } 
} 

我的数据是这样的:

F H 45 36.266 
M F 18 46.967 
M H 29 33.309 
Q F 40 30.078 
M T 95 36.983 
M R 30 23.1768 
F F 31 42.55 
M Q 40 30 
F F 65 39.96 
F T 50 30.962 
F R 80 19.375 
M H 36 24.017 

这是所需的输出:

sex bone age length height 
F H 45 36.266 178.097 
M F 18 46.967 174.201 
M H 29 33.309 172.498 
M T 95 36.983 166.251 
M R 30 23.177 165.000 
F F 31 42.550 159.940 
F F 65 39.960 151.899 
F T 50 30.962 149.799 
F R 80 19.375 145.600 
M H 36 24.017 144.540 
Q F 40 30.000 Wrong Sex Code 
M Q 40 30.000 Wrong Bone Code 
+0

尝试性[统计] .Equals( “M”) –

+0

另外请注意,您的switch语句只能在[Java 7及更高版本](http://stackoverflow.com/questions/338206/why-cant-i-switch-on-a-string)中使用。 –

回答

0

使用equals,而不是==比较String对象(你比较值)。 也:

"M".equals(sex[count])

或其他方式,如果你还检查保健性[统计]不是Null

+0

你是正确的,OP应该使用等于,但OP是*不*比较值,但引用。这实际上正是他的问题的原因。 – Buurman