在我的业余时间尝试用java创建一个时钟,有很多乐趣和两个小时我仍然遇到代码问题。
它告诉我当前的时间,但进展太快。
(将其复制并粘贴到IDE /编译器并运行它,你会看到)
任何人都可以帮助初学者吗?
package clock;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
public class Clock {
public static void main(String[] args) {
int hour;
int minute;
int second;
Scanner keyb = new Scanner(System.in);
System.out.println("What hour is it?");
hour = keyb.nextInt();
System.out.println("What Minute is it?");
minute = keyb.nextInt();
second = 0;
Timer t = new Timer();
t.schedule(new TimerTask() {
Scanner keyb = new Scanner(System.in);
int hour;
int minute;
int second;
int turnOn;
@Override
public void run() {
turnOn = 1;
while (turnOn != 0){
System.out.println("Current time is:"+ hour +":"+minute+":"+second);
second ++;
if (second >= 59){
minute ++;
second = 0;
}
else{
}
if (minute >= 59){
hour ++;
minute = 0;
}
else{
}
if (hour >= 24){
hour = 0;
}
}
}
}, 0, 1000);
}
}
答案 0 :(得分:1)
您已计划每秒启动无限循环。 public class Child
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
[SkipTracking]
public Guid Id { get; set; }
[CascadeDelete]
public virtual Parent Parent { get; set; }
[Required]
[ForeignKey("Parent")]
public Guid ParentId { get; set; }
}
正确地从0开始,然后每秒运行一次run方法。如果在方法t.schedule(TimerTask, long, long)
的每次调用中增加第二个,那将是正确的。不幸的是,不是递增一次,而是启动无限循环,在每次执行中递增。
run
您正在寻找什么。
请注意,请注意,空 Timer t = new Timer();
t.schedule(new TimerTask() {
Scanner keyb = new Scanner(System.in);
int hour;
int minute;
int second;
boolean turnOn = true;
@Override
public void run() {
//CHANGE HERE!!! \/
//You only want to increment seconds once in a call of run method.
if (turnOn){
System.out.println("Current time is:"+ hour +":"+minute+":"+second);
second ++;
if (second >= 59){
minute ++;
second = 0;
}
if (minute >= 59){
hour ++;
minute = 0;
}
if (hour >= 24){
hour = 0;
}
}
}
}, 0, 1000);
块是多余的以及空行。您的代码中不需要它们。更有必要在StackOverflow上发布它们。你的例子应该是最小的。
答案 1 :(得分:0)
有许多事情需要考虑: (1)每次循环后等待1秒钟。 (忽略循环中的处理时间) (2)将分钟和小时逻辑放在'否则如果'块。 像这样的东西
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.TimeUnit;
public class Clock {
public static void main(String[] args) {
int hour;
int minute;
int second;
Scanner keyb = new Scanner(System.in);
System.out.println("What hour is it?");
hour = keyb.nextInt();
System.out.println("What Minute is it?");
minute = keyb.nextInt();
second = 0;
Timer t = new Timer();
t.schedule(new TimerTask() {
Scanner keyb = new Scanner(System.in);
int hour;
int minute;
int second;
int turnOn;
@Override
public void run() {
turnOn = 1;
while (turnOn != 0) {
System.out.println("Current time is:" + hour + ":" + minute
+ ":" + second);
second++;
if (second >= 59) {
minute++;
second = 0;
if (minute >= 59) {
hour++;
minute = 0;
if (hour >= 24) {
hour = 0;
}
}
}
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}, 0, 1000);
}
}
答案 2 :(得分:-1)
我已经通过在while循环之后将turnOn int更改为0来修复此问题,这将使while循环停止,直到下一秒将其重置为1