Java字符串返回null

我试图让一个类从另一个类返回一个字符串,虽然我得到的返回值为null。 我有一个set方法,可以在原始类中设置字符串,但是当我在第二个类中调用该方法时,我得到一个返回null。

这是第一堂课;

public class IceCream { // instance variables - replace the example below with your own private String flavour; public static double price; /** * Constructor for objects of class IceCream */ public IceCream() { // initialise instance variables String flavour = getFlavour(); price = 0.50; } /** * Gets price in pence. * * * @returns the price of the ice cream. */ public static double getPrice() { // put your code here return price; } public int getScoops() { return scoop; } public void setPrice(int newPrice) { price = newPrice; } public void setScoops(int scoopNumber) { scoop = scoopNumber; } public double totalCost() { double cost; cost = scoop * price; return cost; } public String getFlavour() { return flavour; } public void setFlavour(String whatFlavour) { flavour = whatFlavour; } 

}

第二个类,我试图在sundaeDetails方法的println中调用我在setFlavour方法中输入的字符串。

 import java.util.ArrayList; /** * Write a description of class Sundae here. * * @author (your name) * @version (a version number or a date) */ public class Sundae { // instance variables - replace the example below with your own private IceCream flavour; private Topping SundaeTopping; private int scoops; /** * Constructor for objects of class Sundae */ public Sundae() { flavour = new IceCream(); SundaeTopping = new Topping(); scoops = 0; } /** * Set scoop number. */ public void setScoops(int scoopNumber) { scoops = scoopNumber; } /** * Return scoop variable. */ public int getScoops() { return scoops; } /** * Get the price of the sundae. */ public void getPrice() { double cost; double scoopPrice = scoops * IceCream.getPrice(); if ( scoops > 0) { cost = scoopPrice * Topping.getToppingPrice(); System.out.println("Cost of Sundae: " + cost); } else { System.out.println("Need to have a scoop of ice cream in your Sundae."); } } /** * Return the details of the sundae; price, flavour, scoops etc. */ public void sundaeDetails() { System.out.println("You have " + scoops + " scoops of " + flavour.getFlavour() + "ice cream"); } } 

在IceCream类构造函数中,您有:

 String flavour = getFlavour() 

您已创建局部变量,而不是对实例属性的引用。 getFlavour()方法返回您从未设置的属性实例,因此它为null。 你应该在构造函数中有这样的东西:

 this.flavour = "default value"; 

或者在构造函数头上设置flavor参数:

 public IceCream(String flavour) { this.flavour = flavour; (...) } 

称之为:

 IceCream chocolat = new IceCream(" chocolat"); 

如果你想改变味道,请使用setter。

你永远不会调用flavour.setFlavour() ,所以毫不奇怪flavour.getFlavour()返回null。

风味未初始化private String flavour; 同样,当调用IceCream()你设置String flavour = getFlavour() ,它将构造函数中的局部变量flavour设置为null,因为getFlavour()返回null 。 构造函数中的局部String flavour变量IceCream覆盖IceCream类的String flavour字段。 尝试将flavor作为构造函数的参数,然后将该字段设置为该字符串

 public IceCream(String f) { this.flavour = f; price = 0.50; } 

或者在使用您创建的对象之前调用setFlavour()

问题始于IceCream类的构造函数。

 private String flavour; public IceCream() { // initialise instance variables String flavour = getFlavour(); price = 0.50; } public String getFlavour() { return flavour; } 

第一个问题是你正在隐藏你的成员变量flavour – 你声明另一个具有相同名称但其范围仅限于构造函数的变量。 第二个问题是你要分配getFlavour()返回的值,它只是一个返回成员变量本身的访问者(其初始值为null)。

要修复它,您需要在构造函数中指定初始值

 public IceCream() { // initialise instance variables this.flavour = "Vanilla" price = 0.50; } 

在声明它时,也可以分配初始值

 private String flavour = "Vanilla";