Java 如何正确地为变量分配布尔值并对其进行测试?

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

我正在尝试创建一个类,该类使用三个整数变量设置时间,分别表示小时、分钟和秒,第四个布尔变量设置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 + ".";
    }
}

你不能用半天,因为它超出了范围

在计算机编程中,名称绑定的范围(名称与实体(如变量)的关联)是计算机程序中绑定有效的区域:名称可用于引用实体。这种区域称为范围块。在程序的其他部分中,名称可能指的是不同的实体,它可能有不同的绑定,也可能是没有绑定的

在另一个世界中,您在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 + ".";
    }