mooc java exercise 78,有限计数器不接受用户输入

时间:2017-06-13 16:39:24

标签: java

试着和我的儿子学习java。我用Google搜索了各种单词,但似乎无法找到答案。我很感激任何帮助或指导。

程序没有接收mins / hrs的用户输入来启动计数器。因此,对于23:59:50的输入,计数器在00:00:50开始。这是我迄今为止的代码:

主类:

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    Scanner reader = new Scanner(System.in);

    BoundedCounter seconds = new BoundedCounter(59);
    BoundedCounter minutes = new BoundedCounter(59);
    BoundedCounter hours = new BoundedCounter(23);

    System.out.print("seconds: ");
    int s = Integer.parseInt(reader.nextLine());
    System.out.print("minutes: ");
    int m = Integer.parseInt(reader.nextLine());
    System.out.print("hours: ");
    int h = Integer.parseInt(reader.nextLine());

    seconds.setValue(s);
    minutes.setValue(m);
    hours.setValue(h);


    int i = 0;
    while ( i < 121 ) {
        System.out.println( hours + ":" + minutes + ":" + seconds);   

        seconds.next();

        if(seconds.getValue()== 0){
        minutes.next();
        }
        // if minutes become zero, advance hours
        if(minutes.getValue()== 0 && seconds.getValue()== 0){
            hours.next();
        }
        i++;
    }


}
}

public class BoundedCounter {
    private int value;
    private int upperLimit;

 public BoundedCounter(int upperLimit){
     this.value = 0;
     this.upperLimit = upperLimit;
 }
 public void next(){
    if(value < upperLimit){
        value++;
    }
    else {
        this.value = 0;
    }
    }

 public String toString(){
     if(value < 10){
         return "0" + this.value;
     }
     else{
     return "" + this.value;
}
}
 public int getValue(){
     return this.value;
 }
 public void setValue(int newValue){
     if(newValue > 0 && newValue < this.upperLimit){
         this.value = newValue;
     }

 }
}

2 个答案:

答案 0 :(得分:0)

两个建议。

用for(int i = 0; i&lt; 121; i ++)替换while等。你的方式有效,但使用for是更常见的方法。

你可以用不同的方式输入你的输入,一行上的秒数,然后是下一行的分钟数,然后是三分之一的小时数。请注意,您正在以相反的顺序读取值。这应该可以使你现有的代码工作。

或者,看看API。 useDelimiter()接受一个设置分隔符的正则表达式。在你的情况下,&#34;:&#34;应该管用。然后,使用nextInt()。当然,如果输入错误输入,这将引发异常。

祝你好运!

答案 1 :(得分:0)

BoundedCounter类中的setValue方法只会使您的值稍微偏离。您的setValue方法应为&gt; =和&lt; =:

public void setValue(int newValue){
 if(newValue >= 0 && newValue <= this.upperLimit){
     this.value = newValue;
 }}