如何正确地为变量赋值并测试它?

时间:2018-03-21 14:45:33

标签: java

我正在尝试使用三个整数变量来设置时间,小时,分钟和秒,以及第四个布尔变量来设置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 + ".";
    }
}

5 个答案:

答案 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变量不在退货范围内。