提问人: 提问时间:9/29/2021 更新时间:9/29/2021 访问量:323
如何从我输入的时间中减去分钟数?
How can I subtract minutes from the time I input?
问:
我正在做教授的作业,要求我写一个班级,以小时和分钟表示时间。我必须能够在时间上添加小时,从时间中减去小时,在时间上添加分钟,从时间中减去分钟。我坚持在时间上增加分钟。如果时间是 11:00,我想增加 90 分钟。正确的输出是 12:30。但是对于我的代码,我的输出始终是 12。有人可以帮我修改我的代码以便添加分钟数吗?因为我也需要它来弄清楚如何减去分钟。
import java.util.Scanner;
public class Time {
private int hour;
private int minute;
public Time() {
}
public Time(int newHour, int newMinute) {
setTime(newHour, newMinute);
}
public void setTime(int h, int m) {
setHour(h);
setMinute(m);
}
public void setHour(int h) {
hour = ((h >= 0 && h < 24) ? h : 0);
}
public void setMinute(int m) {
minute = ((m >= 0 && m < 60) ? m : 0);
}
public int getHour() {
return hour;
}
public int getMinute() {
return minute;
}
public void addHours(int h) {
setHour(hour + h);
if (hour == 12)
hour = 12;
else if (hour > 12)
hour = hour - 12;
}
public void subtractHours(int h) {
setHour(hour - h);
if (hour == 0)
hour = 12;
else if (hour > 12)
hour = hour - 12;
if (hour == 12)
hour--;
}
public void addMinutes(int m) {
setMinute(minute + m);
if (m > 60)
m = m + minute;
else if (m <= 60)
m = m + minute;
addHours(m / 60);
}
public void subtractMinutes(int m) {
setMinute(minute - m);
if (m > 60)
m = minute - m;
else if (m <= 60)
m = minute - m;
if (m <= 60)
hour += minute / 60;
else if (m <= 60)
minute += minute % 60;
}
@Override
public String toString() {
return "DateAndTime [hour=" + hour + ", minute=" + minute + "]";
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Enter the time");
System.out.print("Hours: ");
int hour = input.nextInt();
System.out.print("Minutes: ");
int minute = input.nextInt();
Time time = new Time(hour, minute);
boolean done = false;
while (!done) {
System.out.println("1. Add Hours");
System.out.println("2. Subtract Hours");
System.out.println("3. Add Minutes");
System.out.println("4. Subtract Minutes");
System.out.print("Choice: ");
switch (input.nextInt()) {
case 1:
time.addHours(input.nextInt());
break;
case 2:
time.subtractHours(input.nextInt());
break;
case 3:
time.addMinutes(input.nextInt());
break;
case 4:
time.subtractMinutes(input.nextInt());
break;
}
System.out.println("Time is: " + time.toString());
}
}
}
答:
1赞
Scary Wombat
9/29/2021
#1
看看这个
setMinute(30 + 90);
->
minute = ((120 >= 0 && 120 < 60) ? m : 0);
分钟变为 0
之后
if (m > 60)
m = m + minute;
else if (m <= 60)
m = m + minute;
不执行任何分钟操作,仅更改本地范围的变量。
了解如何使用调试器。
2赞
MadProgrammer
9/29/2021
#2
因此,您需要做的是计算出指定时间值中的小时数,并计算出剩余的分钟数(一旦取出小时数)
幸运的是,这相对容易且相对常见,例如......
int time = 90;
int hours = time / 60;
int minutes = time % 60;
System.out.println(hours);
System.out.println(minutes);
将输出
1
30
因此,在 90 分钟内,您有 1 小时 30 分钟的时间,然后需要将其添加到您的基本值中,但是,一个稍微好一点的解决方案是将现有值转换为分钟,添加/减去所需的分钟,然后将值转换回小时/分钟。
例如。。。
public void addMinutes(int m) {
int time = ((getHour() * 60) + getMinute()) + m;
int hours = time / 60;
int minutes = time % 60;
setHour(hours);
setMinute(minutes);
}
public void subtractMinutes(int m) {
addMinutes(-m);
}
因此,通过这些修改,我们可以使用类似的东西......
Time time = new Time(11, 0);
time.addMinutes(90);
System.out.println(time);
其中输出...
DateAndTime [hour=12, minute=30]
评论