【问题标题】:What is a data field?什么是数据字段?
【发布时间】:2020-02-07 23:04:43
【问题描述】:

我应该修改 Time2 类(如下)以将时间实现为自午夜以来的秒数。该类应该有一个数据字段(一个具有自午夜以来的秒数的 int)而不是三个。此更改不应影响公共方法的参数、行为或输出。

然后创建一个带有 main 方法的 Driver 类来测试您的 Time2 类。该程序应要求用户输入午夜过后的小时数、分钟数和秒数,创建一个 Time2 对象并使用 mutator 方法。然后程序应该使用 toString() 方法打印出时间。

我的问题是下面代码的哪一部分是数据字段?

import java.util.Scanner;

public class Driver {

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    Time2 time = new Time2();

    System.out.print("Enter hours:");
    int hours = input.nextInt();                                
    System.out.print("Enter minutes:"); 
    int minutes = input.nextInt();                              
    System.out.print("Enter seconds:"); 
    int seconds = input.nextInt();

    time.setSecond(seconds);    
    System.out.println(time.toString());
}

public static class  Time2 {

private  int  hour; 
private  int  minute;
private  int  second;   

public Time2() {this(0, 0, 0);}
public Time2(int  hour) {this(hour, 0, 0);}
public Time2(int  hour, int  minute) {this(hour, minute, 0);}

public Time2(int  hour, int  minute, int  second) {
    if(hour<0||hour>=24)
        throw new IllegalArgumentException("hour must be 0-23");
    if (minute < 0 || minute >= 60)
        throw new IllegalArgumentException("minute must be 0-59");
    if (second < 0 || second >= 60)
        throw new IllegalArgumentException("second must be 0-59");
    this.hour = hour;
    this.minute = minute;
    this.second = second;
}

public Time2(Time2 time) {this(time.getHour(), time.getMinute(), time.getSecond());}

public void setTime(int  hour, int  minute, int  second) {
    if (hour<0||hour>=24)
        throw new IllegalArgumentException("hour must be 0-23");
    if (minute < 0 || minute >= 60)
        throw new IllegalArgumentException("minute must be 0-59");
    if (second < 0 || second >= 60)
        throw new IllegalArgumentException("second must be 0-59");
    this.hour = hour;
    this.minute = minute;
    this.second = second;
}

public void setSecond(int  second) {
    if (second <= 0 || second > 60)
        throw new IllegalArgumentException("second must be 0-59");
    this.second = second;
}

public int  getHour() {return second/60/60;}
public int  getMinute() {return second/60;}
public int  getSecond() {return second;}

public String  toUniversalString() {
    return String.format( "%02d:%02d:%02d", getHour(), getMinute(), getSecond());
}

public String  toString() {
    return String.format("%d:%02d:%02d %s",
                          ((getHour() == 0 || getHour() == 12) ? 12 : getHour() % 12), getMinute(),
                          getSecond(), (getHour() < 12 ? "AM" : "PM"));
}
}
}

~UPDATE~ 我得到了代码,唯一的问题是它显示错误的小时和分钟(见输出链接) output

【问题讨论】:

  • 字段是类的属性。在下面的示例中是字段: private int hour; // 0 - 23 私有 int 分钟; // 0 - 59 私有 int 秒; // 0 - 59 你必须添加类似 private int secondsSinceMidNight;字段将保存基于通过 Time2 类传递的小时、分钟和秒的计算值。您可以创建一个方法来进行计算并从 main 方法调用它以获取 secondsSinceMidNight 字段的值(您也可以将其称为变量)。希望对您有所帮助
  • @LaxmanChari 谢谢你的提示!他们非常有帮助:) 我只希望我的老师教我们声明 throw new IllegalArgumentException 的含义:/ 这可以合并成一个 if 声明吗?
  • this link 解释异常。当您说throw new IllegalArgumentException("hour must be 0-23"); 时,您是在指示程序从此时停止执行,因为收到的输入与预期不符。由于特定原因,每个条件都会失败,在本例中,小时数可以在 0-23 之间,因此您的消息仅在这种情况下相关。如果你有通用消息,那么你只能有一个抛出异常的 if 语句。
  • 抱歉,我不确定如何处理这个问题。既然在这种情况下,if 语句只能接收一条消息,那么 if else 语句会起作用吗?我不知道我还能怎么做。
  • 代码正在尝试确定输入是否有效。如果输入无效,则应向应用程序的用户显示输入无效的消息,并说明原因。因为您有 3 个字段,并且每个字段都可以包含特定值,例如小时可以在 0-23 之间,分钟可以在 0-59 之间等等。您可以编写 if 语句来验证用户输入并通知用户哪里出错,以便他们可以更正输入并再次运行程序。如果您通过传递 800 作为小时值来运行此代码,它应该会导致代码执行失败并显示消息 hour must be 0-23

标签: java


【解决方案1】:

“日期字段”或“数据成员”是一个变量,它是类的一部分,并保存一些数据。在这种情况下,您有三个数据字段 - hourminutesecond(全部为 ints)。您的任务是用单个字段 second 替换此实现,并相应地调整方法的实现,以便它们保持其行为。

【讨论】:

  • 代码会去掉public int getHour() {return hour;}public int getMinute() {return minute;}吗?
  • @ally 的要求,据我所知,是保留这些方法。不过,您将不得不更改实现。例如。 public in getHour() { return second/60/60; }.
  • 我已经编辑了我的代码,但是它不会显示时间。
猜你喜欢
  • 2011-01-11
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2011-03-30
相关资源
最近更新 更多