为什么这个字符串值为null?

时间:2018-03-18 19:36:15

标签: java

所以我完成了我的代码,遇到了错误,并且不知道为什么!

字符串"大小"当它到达" baseArea()"时为null。方法

不显示任何错误。

编辑:添加了类的Main方法,其中引用了所有内容,请注意这不是类中的完整代码!

这是相关代码:

public class OrderingSystem 
{
private Canvas canvas;
private double Price;
private String Topping1 = setTopping1();
private String Topping2 = setTopping2();
private String Sauce = setSauce();
private String Size;
private String Crust;
private double BaseArea;

/**
 * Constructor for the ordering system.
 */
public OrderingSystem()
{
    canvas = new Canvas("Pizza Ordering", 900, 650);         
}

/**
 * Method to draw the outline of the order screen.
 */
public void drawOrderScreen()
{
    canvas.setForegroundColor(Color.BLACK);
    // vertical dividers
    canvas.drawLine(300, 0, 300, 600);
    canvas.drawLine(600, 0, 600, 600);

    // halfway divider
    canvas.drawLine(0, 300, 900, 300);
    setSauce();
    startToppings();
    startOrdering();
    setSize();
    baseArea(BaseArea, Size);
    Crust();
}

public String setSize(){
    System.out.print("What size would you like: Large, Medium or Small? :   ");
    Scanner sizescanner = new Scanner(System.in);
    String Size = sizescanner.nextLine();

    if (Size.equals("Large")){
        System.out.print( "Large selected !  ");
    }
    else if (Sauce.equals("Medium")){
        System.out.print( "Medium selected !"  );
    }

    else if (Sauce.equals("Small")){
        System.out.print( "Small selected !"  );
    }

    else {
        sizescanner.reset();
        System.out.print("Invalid Size! ");
        setSize();
    }
    return Size;
}

public double baseArea(double baseArea,String Size){

    if (Size.equals("Large")){
        baseArea = 176.7150;
    }
    else if (Size.equals("Medium")){
        baseArea = 113.0976;
    }

    else if (Size.equals("Small")){
        baseArea = 78.54;
    }
    return baseArea;
}

2 个答案:

答案 0 :(得分:1)

您的setSize方法从扫描程序中获取大小,但实际上从未设置Size字段的值,只返回它。

setSize方法的返回类型更改为void,并将该方法中的return Size;来电替换为this.Size = Size;

另一个注意事项,你的递归也有点破碎。在else块中调用setSize后,您需要从方法返回以防止使用无效的大小更新字段。

答案 1 :(得分:1)

setSize()方法中,除非您输入“大'当您检查Sauce值是否等于输入的值时,其他所有内容都将变为空:

if(Size.equals("large"){
  doSomething();
} else if (Size.equals("medium"){
  doSomething();
} else if(Size.equals("small"){
  doSimething();
}