Java - 为我的构造函数创建输入限制

时间:2014-11-22 10:47:28

标签: java constraints

我收到了学校的任务,他们要求我建立一个带有一些功能的简单时钟。

我需要某种约束,这样如果我创建一个对象,人们只能输入好的整数。例如;你不能在几小时内输入25或者在分钟和秒数时输入60以上的整数。

我开始为小时,分钟和秒创建实例变量。我创建了一个构造函数;

我的代码如下:

public class Clock{

    //Instance variables
    public int seconds;
    public int minutes;
    public int hours;

public Clock ( int InsertSeconds, int InsertMinutes, int InsertHours){
    seconds = InsertSeconds;
    minutes = InsertMinutes;
    hours   = InsertHours;
}

}

诗;我是java的初学者,不要向我开枪

谢谢!

4 个答案:

答案 0 :(得分:0)

抛出异常。 IllegalArgumentException将是一个不错的选择。

public Clock ( int InsertSeconds, int InsertMinutes, int InsertHours){
    if (InsertSeconds > 59 || InsertSeconds < 0) {
         throw new IllegalArgumentException("InsertSeconds must be in range 0-59 but found "+ InsertSeconds);
    }
    // similar for minutes & hours

    seconds = InsertSeconds;
    minutes = InsertMinutes;
    hours   = InsertHours;
}

答案 1 :(得分:0)

使用例外!例如:

if(seconds > 60)
     throw new SecondsTooBigException();

你必须创建一个新的SecondsTooBigExcetion

public class SecondsTooBigException extends Exception {
    @Override
    public String getMessage() {
        return super.getMessage() + "\nSecondsTooBigException: Exception occured, because you defined a value, which is not allowed for seconds";
    }
}

答案 2 :(得分:0)

假设您的时钟具有24小时格式(即简单的解决方案),您可以使用基本流量控制:

public boolean areAllSegmentsValid() {
    if (this.hours < 0 || this.hours > 24) {
        System.out.println("Hours are not in range 0-24");
        // A better of option wil be exception (you are novice so learn about first)
        return false;
    } else if (this.minutes < 0 || this.minutes > 60){
        System.out.println("Minutes are not in range 0-24");
        // A better of option wil be exception (you are novice so learn about first)
    } else if (this.seconds < 0 || this.seconds > 60){
        System.out.println("Minutes are not in range 0-24");
        // A better of option wil be exception (you are novice so learn about first)
    } else {
        return true;
   }

   return true;
}

上述解决方案要求您对Java有一个最低限度的理解,您已经在原始问题中指出了这一点。一旦掌握了这个概念,我建议你尝试使用断言替换上面的if条件,例如:

assert (this.hours >= 0 && this.hours<=24); // Assertion to check if the cond. is true
...
...

更多的Java方法是使用Clock类的例外,例如IllegalHoursValue异常或IllegalTimeSegment异常。但是,为了您的安全,我会留下您来调查其余部分。

答案 3 :(得分:0)

您可以使用此静态方法:

public static boolean validTime(int hours, int minutes, int seconds) {
    if (hours <= 24 && minutes <= 60 && seconds <= 60) {
        if (hours >= 0 && minutes >= 0 && seconds >= 0) {
            return true;
        }
    }
    return false;
}

为其提供用户输入的值。如果它返回true,则将其传递给构造函数,否则请求用户再次输入值。