This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center
                            
                        
                    
                
                7年前关闭。
            
        

在此代码的底部,我遇到了“无法到达的语句”错误。我已经尝试了一些方法,但是无法弄清楚为什么会这样。错误接近代码的底部(我在错误所在的位置加上//注释),请帮助我指出正确的方向!

/**
* Describes a certain model.
*
* @author (Joshua Baker)
* @version (1.0)
*/
public class Model
{
public static final int IN_PER_FOOT = 12;
public static final int BASE_RATE = 60;
public static final int TALL_INCHES = 67;
public static final double THIN_POUNDS = 140.0;
public static final int TALL_THIN_BONUS = 5;
public static final int TRAVEL_BONUS = 4;
public static final int SMOKER_DEDUCTION = 10;

private String firstName;
private String lastName;
private int heightInInches;
private double weightInPounds;
private boolean travel;
private boolean smokes;
private String newHeight;
private int perHourRate;

/**
 * Default constructor
 */
public Model()
{
    setFirstName ("");
    setLastName  ("");
    setHeightInInches  (0);
    setWeightInPounds  (0.0);
    setTravel  (false);
    setSmokes  (false);
}

/**
 *
 */
public Model (String whatIsFirstName, String whatIsLastName, int whatIsHeight, double whatIsWeight,
boolean canTravel, boolean smoker)
{
    setFirstName  (whatIsFirstName);
    setLastName  (whatIsLastName);
    setHeightInInches  (whatIsHeight);
    setWeightInPounds  (whatIsWeight);
    setTravel  (canTravel);
    setSmokes  (smoker);
}

/**
 *@return first name
 */
public String getFirstName()
{
    return firstName;
}

/**
 *@return last name
 */
public String getLastName()
{
    return lastName;
}

/**
 *@return height in inches
 */
public int getHeightInInches()
{
    return heightInInches;
}

/**
 *@return the converted height
 */
public String getNewHeight()
{
    return newHeight;
}

/**
 *@return weight in pounds
 */
public double getWeightInPounds()
{
    return weightInPounds;
}

/**
 *@return models pay per hour rate
 */
public int getPerHourRate()
{
    return perHourRate;
}


/**
 *@return travel
 */
public boolean getTravel()
{
    return travel;
}

/**
 *@return smokes
 */
public boolean getSmokes()
{
    return smokes;
}

/**
 * models first name
 */
public void setFirstName(String whatIsFirstName)
{
    firstName = whatIsFirstName;
}

 /**
 * models last name
 */
public void setLastName(String whatIsLastName)
{
    lastName = whatIsLastName;
}

 /**
 * models height in inches
 */
public void setHeightInInches(int whatIsHeight)
{
    if (whatIsHeight >0){
    heightInInches = whatIsHeight;
    }

}

 /**
 * models weight in pounds
 */
public void setWeightInPounds(double whatIsWeight)
{
    if (whatIsWeight >0){
    weightInPounds = whatIsWeight;
    }
}

 /**
 * can model travel
 */
public void setTravel(boolean canTravel)
{
    travel = canTravel;
}

 /**
 * does model smoke
 */
public void setSmokes(boolean smoker)
{
    smokes = smoker;
}

/**
 * Converts to feet and inches
 */
public String convertheightToFeetInches()
{
int leftOver = (heightInInches %= IN_PER_FOOT);
int newHeight = (heightInInches % IN_PER_FOOT);
return newHeight + "Foot" + leftOver + "Inches";
}

/**
 *
 */
public int calculatePayPerHour(){
    if (heightInInches  >= TALL_INCHES && (weightInPounds <= THIN_POUNDS)) {
        perHourRate = BASE_RATE + TALL_THIN_BONUS;
        return perHourRate;
    }
    else
    {
        perHourRate = BASE_RATE;
        return perHourRate;
    }

    if (travel)  {          //unreachable statement


        perHourRate = BASE_RATE + TRAVEL_BONUS;
        return perHourRate;
    }
    else
    {
        perHourRate = BASE_RATE;
        return perHourRate;

    }

    if (smokes) {             //unreachable statement
        perHourRate = BASE_RATE - SMOKER_DEDUCTION;
        return perHourRate;
    }

    else {}

    }






/**
 * Displays details
 */
public  void displayInfo()
{
    System.out.print("Name : " + getFirstName() + " ");
    System.out.println(getLastName());
    System.out.println("Height : " + getNewHeight() + "inches");
    System.out.println("Weight : " + getWeightInPounds() + "pounds");
    System.out.print("Travel : " + getTravel() + " " );
    System.out.print("Smokes : " + getSmokes() );
    System.out.println("Hourly rate : " + getPerHourRate() );
}


}

最佳答案

那是因为您的程序将从您的第一个if block或相应的else块中返回:-

if (heightInInches  >= TALL_INCHES && (weightInPounds <= THIN_POUNDS)) {
    perHourRate = BASE_RATE + TALL_THIN_BONUS;
    return perHourRate;
}
else
{
    perHourRate = BASE_RATE;
    return perHourRate;
}
System.out.println("This will never get printed. And will show compiler error");


因此,将执行两个return语句中的任何一个。因此,任何其他代码都无法访问。



似乎您希望拥有所有service rates的累加总和才能得到最终的perHourRate,为此,您可以从每个return statement块中删除if-else。然后对于第一个之后的所有if-else块,而不是将current price分配给perHourRate,而是执行compound addition +=

另外,由于您正在处理实例字段-perHourRate,因此根本不需要返回它。您在perHourRate上所做的更改可以使用getPerHourRate()获得。因此,将返回类型更改为void

可以尝试将calculatePayPerHour方法更新为以下方法:

public void calculatePayPerHour(){
    if (heightInInches  >= TALL_INCHES && (weightInPounds <= THIN_POUNDS)) {
        perHourRate = BASE_RATE + TALL_THIN_BONUS;  // Initial assignment

    } else {
        perHourRate = BASE_RATE;  // Initial assignment
    }

    /** Rest of the assignment will be compound assignment, since you
        are now updating the `perHourRate` **/

    if (travel)  {
        perHourRate += TRAVEL_BONUS;
    } // You don't need an else now. Since BASE_RATE is already added

    if (smokes) {
        perHourRate -= SMOKER_DEDUCTION;
    }
}

10-08 01:30