这是我关于setter和getter的任务,但由于某种原因它无法运行。 任何人都可以检查问题对我来说是什么? 谢谢。
public class FlightTest
{
public static void main (String [] args)
{
String name;
String number;
String Orig;
String Desti;
Scanner scan = new Scanner (System.in);
Flight data = new Flight ();
System.out.print ("Airline Name: ");
String AirlineName = scan.nextLine ();
data.setAirlineName (name);
System.out.print ("Flight Number: ");
String FlightNumber = scan.nextLine ();
data.setFlightNumber (number);
System.out.print ("Origin: ");
String Origin = scan.nextLine();
data.setOrigin (Orig);
System.out.print ("Destination: ");
String Destination = scan.nextLine ();
data.setDestination (Desti);
System.out.println (data);
}
}
public class Flight
{
private String AirlineName;
private String FlightNumber;
private String Origin;
private String Destination;
public String setAirlineName()
{
String Name = AirlineName;
return Name;
}
public Flight ()
{
AirlineName = "";
FlightNumber = "";
Origin = "";
Destination = "";
}
public String getAirlineName()
{
return AirlineName;
}
public void setAirlineName (String name)
{
AirlineName = name;
}
public String getFlightNumber ()
{
return FlightNumber;
}
public void setFlightNumber (String number)
{
FlightNumber = number;
}
public String getOrigin ()
{
return Origin;
}
public void setOrigin (String Orig)
{
Origin = Orig;
}
public String getDestination ()
{
return Destination;
}
public void setDestination (String Desti)
{
Destination = Desti;
}
public String toString ()
{
String result = AirlineName + " flight number " + FlightNumber + " leaves from " + Origin + " to " + Destination + ".";
return result;
}
}
答案 0 :(得分:3)
问题在于:
String AirlineName = scan.nextLine ();
data.setAirlineName (name);
您正在阅读一个名称并将其放入AirlineName
,然后使用不同的变量作为参数调用setter。
实际上,您应该收到编译错误,告诉您name
未初始化。
您还有第二个(虚假)setAirlineName方法,如下所示:
public String setAirlineName()
{
String Name = AirlineName;
return Name;
}
...这不是一个合适的制定者。但看起来你的main
方法并没有调用它,所以这不是你问题的原因。 (您正在调用setAttributeName(String)
重载...)
最后,请,请学习遵循标识符的标准Java样式约定。变量或属性名称不应以大写字母开头。将您的AirlineName
属性和变量更改为airlineName
,依此类推。
答案 1 :(得分:2)
看起来您正在将Scanner newLine()调用读入新变量,然后传入尚未初始化的变量。例如,我认为你想要这样的东西:
System.out.print ("Airline Name: ");
name = scan.nextLine ();
data.setAirlineName (name);
请注意,第二行将nextLine()读入您传递给setter的变量中。
答案 2 :(得分:1)
你有这个方法:
public String setAirlineName()
{
String Name = AirlineName;
return Name;
}
哪个与你的实际setter有冲突,因为它们的名称相同但返回类型不同,因此编译器可能会出现吐出错误,我认为这是“不工作”的意思:
public void setAirlineName (String name)
{
AirlineName = name;
}
String setAirlineName(void)
可能意味着String getAirlineName(void)
,您已经实现了,就像基本的getter一样:
public String getAirlineName()
{
return AirlineName;
}
作为Dante617 has answered,另一个错误是你使用不同的局部变量来读取输入并忽略你在Scanner
对象之前声明(并且没有初始化)的那些。
答案 3 :(得分:1)
您正在阅读变量AirlineName
,但将另一个未初始化的变量name
传递给setter:
String AirlineName = scan.nextLine ();
data.setAirlineName (name);
^^^^
其他3个变量FlightNumber
,Origin
和Destination
也是如此。