我正在尝试使用三个整数变量来设置时间,小时,分钟和秒,以及第四个布尔变量来设置AM或PM。我能够让三个整数变量正常工作,但我不知道我对布尔变量没有被正确分配或测试的错误。
public class Time
{
private int hour;
private int minute;
private int second;
private boolean amPm;
public Time(int setHour, int setMinute, int setSecond, boolean setAmPm)
{
hour = setHour;
minute = setMinute;
second = setSecond;
amPm = setAmPm;
}
public String toString()
{
if (amPm == true)
{
String halfDay = "P.M.";
}
else
{
String halfDay = "A.M.";
}
return hour + ":" + minute + ":" + second + " " + halfDay + ".";
}
}
答案 0 :(得分:3)
你不能使用halfDay,因为它不在范围内
在计算机编程中,名称绑定的范围 - 名称与实体的关联,例如变量 - 是绑定有效的计算机程序的区域:其中名称可用于引用实体。这样的区域被称为范围块。在程序的其他部分,名称可能指的是不同的实体(它可能具有不同的绑定),或者根本没有(可能是未绑定的)。
在其他世界中,您在if / else语句中声明halfDay,但是一旦关闭括号,它就会消失。如果您想将它用于连接,则需要通过以前声明来更改其范围。
public class Time
{
private int hour;
private int minute;
private int second;
private boolean amPm;
public Time(int setHour, int setMinute, int setSecond, boolean setAmPm)
{
hour = setHour;
minute = setMinute;
second = setSecond;
amPm = setAmPm;
}
public String toString()
{
String halfDay;
if (amPm == true)
{
halfDay = "P.M.";
}
else
{
halfDay = "A.M.";
}
return hour + ":" + minute + ":" + second + " " + halfDay + ".";
}
}
答案 1 :(得分:2)
您在此处遇到的问题是范围界定:您正在halfDay
函数中的if / else语句中初始化toString()
字符串,但它需要在该范围之外可用在退货声明中使用。
您的目标可以使用ternary operator来实现:
@Override // Overriding the toString() method from Object
public String toString() {
return hour + ":" +
minute + ":" +
second + " " +
(amPm ? "P.M" : "A.M") + "."
}
答案 2 :(得分:1)
boolean
没问题,halfDay
变量没有范围。给它范围。像,
public String toString()
{
String halfDay;
if (amPm)
{
halfDay = "P.M.";
}
else
{
halfDay = "A.M.";
}
return hour + ":" + minute + ":" + second + " " + halfDay + ".";
}
但是,我宁愿不使用这样的临时变量。你可以做到,
public String toString()
{
if (amPm)
{
return hour + ":" + minute + ":" + second + " P.M..";
}
return hour + ":" + minute + ":" + second + " A.M..";
}
带有三元和格式String
的或。像
public String toString()
{
return String.format("%d:%d:%d %s.", hour, minute, second, amPm ? "P.M." : "A.M.");
}
答案 3 :(得分:1)
简化布尔检查并更改halfDay的范围:
public Time(int setHour, int setMinute, int setSecond, boolean setAmPm)
{
hour = setHour;
minute = setMinute;
second = setSecond;
amPm = setAmPm;
}
public String toString()
{
String halfDay = "A.M.";
if (amPm)
{
halfDay = "P.M.";
}
return hour + ":" + minute + ":" + second + " " + halfDay + ".";
}
答案 4 :(得分:0)
public String toString()
{
String halfDay = "";
if (amPm == true)
{
halfDay = "P.M.";
}
else
{
halfDay = "A.M.";
}
return hour + ":" + minute + ":" + second + " " + halfDay + ".";
}
这样做。您的halfDay变量不在退货范围内。