Java 如何正确地为变量分配布尔值并对其进行测试?
我正在尝试创建一个类,该类使用三个整数变量设置时间,分别表示小时、分钟和秒,第四个布尔变量设置am或PM。我能够让三个整数变量正确工作,但我不知道布尔变量没有被正确分配或测试,我做错了什么Java 如何正确地为变量分配布尔值并对其进行测试?,java,Java,我正在尝试创建一个类,该类使用三个整数变量设置时间,分别表示小时、分钟和秒,第四个布尔变量设置am或PM。我能够让三个整数变量正确工作,但我不知道布尔变量没有被正确分配或测试,我做错了什么 public class Time { private int hour; private int minute; private int second; private boolean amPm; public Time(int setHour, int setMi
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 + ".";
}
}
你不能用半天,因为它超出了范围 在计算机编程中,名称绑定的范围(名称与实体(如变量)的关联)是计算机程序中绑定有效的区域:名称可用于引用实体。这种区域称为范围块。在程序的其他部分中,名称可能指的是不同的实体,它可能有不同的绑定,也可能是没有绑定的 在另一个世界中,您在if/else语句中声明了半天,但一旦关闭括号,半天就失效了。如果要将其用于连接,则需要通过在之前声明它来更改其作用域
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 + ".";
}
}
布尔值很好,半天变量没有作用域。给它范围。像
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..";
}
或使用三元和格式化字符串。像
这里遇到的问题是作用域:您正在初始化toString函数中if/else语句中的半天字符串,但它需要在该字符串之外可用,才能在return语句中使用 您的目标可以通过类似的方式实现:
这样做。您的半天变量不在返回的范围内。简化布尔检查和更改的半天范围:
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 + ".";
}
您没有提到如何使用这个时间类,以及在哪种情况下如何传递参数?您的问题是变量halfDayDeclare halfDay的作用域在if之外。执行ifamPm==true没有用,您应该执行ifamPmah!我的不好…谢谢你的提醒,现在编辑…并且投票支持更少但不是最不重要的,说实话详细的解决方案。
@Override // Overriding the toString() method from Object
public String toString() {
return hour + ":" +
minute + ":" +
second + " " +
(amPm ? "P.M" : "A.M") + "."
}
public String toString()
{
String halfDay = "";
if (amPm == true)
{
halfDay = "P.M.";
}
else
{
halfDay = "A.M.";
}
return hour + ":" + minute + ":" + second + " " + 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 + ".";
}