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年前关闭。
在此代码的底部,我遇到了“无法到达的语句”错误。我已经尝试了一些方法,但是无法弄清楚为什么会这样。错误接近代码的底部(我在错误所在的位置加上//注释),请帮助我指出正确的方向!
}
因此,将执行两个return语句中的任何一个。因此,任何其他代码都无法访问。
似乎您希望拥有所有
另外,由于您正在处理实例字段-
可以尝试将
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