简体   繁体   English

使用JOptionPane要求用户输入时间

[英]Asking for A User Input for Time using JOptionPane

my teacher has asked us to ask a user for both a start time and stop time of a racer by asking the them to input a time (HH, mm, ss) using the JOptionPane. 我的老师要求我们通过使用JOptionPane输入时间(HH,mm,ss)来要求用户提供赛车手的开始时间和停止时间。 I am not sure how to do this. 我不确定该怎么做。 I have tried doing integer.parseint(joptionpane....) but I keep getting error messages when I input a time. 我曾尝试做integer.parseint(joptionpane ....),但输入时间后仍会收到错误消息。 Also, I know the problem is that since I'm asking a user to input a time for my Time class that it should be different. 另外,我知道问题在于,由于我要用户为我的Time类输入一个时间,因此该时间应该有所不同。 I need some help on where to get started from this point. 从这一点开始,我需要一些帮助。 Here is my code(I've also included my time class in it: 这是我的代码(我还在其中包含了时间类:

package Racers.java;

import javax.swing.JOptionPane;

public class Racers
{   

public static void main(String[] args)
{

    //racer1
    String racer1;
    Time startTime1;
    Time stopTime1;
    double elapsedTime1;

    //assigning racer1
    racer1 = JOptionPane.showInputDialog("Please enter the name of the first racer: ");
    startTime1 = new Time();
    stopTime1 = new Time();
    elapsedTime1 = stopTime1.minus(startTime1).getTime();

    JOptionPane.showMessageDialog(null, 
            "Here is the racer's name, start time, stop time, and elapsed time:\n"
            + racer1 + (" - ") + ("Start time: ") + startTime1 + ("; ") + ("Stop time: ") + stopTime1 + ("; ") + ("Elapsed time: ") + elapsedTime1 + "\n"

}//End main
}//End Racers


class Time 
{
//Variable to hold seconds
double seconds;

//Constructors for class Time
public Time()
{
    seconds = 0.0;
}

public Time(double newSeconds)
{
    seconds = newSeconds;
}

public Time(int hours, int minutes, double newSeconds)
{
    seconds = (double)(hours * 3600 + minutes * 60) + newSeconds;
}

//Observers for class Time
public double getTime()
{
    //Return elapsed time
    return seconds;
}

public int getHours()
{
    //Compute whole hours from seconds
    return (int)seconds / 3600;
}

public int getMinutes()
{
    //Seconds after hours taken out
    int remainingSeconds = (int)seconds % 3600;
    //Compute minutes from remainder
    return remainingSeconds / 60;
}

public double getSeconds()
{
    //Seconds after minutes taken out
    return seconds % 60.0;
}

//Returns HH:MM:SS.FFF
public String toString()
{
    int hours = (int)seconds / 3600;
    int minutes = (int)seconds % 3600 / 60;
    return hours + ":" + minutes + ":" + seconds % 60.0;
}

//Operations for class Time
public Time plus(Time otherTime)
{
    return new Time(seconds + otherTime.seconds);
}

public Time minus(Time otherTime)
{
    return new Time(seconds - otherTime.seconds);
}

}//End Time

Here is the issue 这是问题

startTime1 = new Time();
stopTime1 = new Time();

you are initializing start & stop time using default constructor where default constructor which returns start and stop time as zero hence you get output also zero. 您正在使用默认构造函数初始化开始和停止时间,其中默认构造函数将开始和停止时间返回为零,因此输出也为零。

So you need to use parameterized constructor to differentiate the times. 因此,您需要使用参数化构造函数来区分时间。

ie

startTime1 = new Time(10,10,10d); // 10hr 10 min 10 sec
stopTime1 = new Time(10,20,10d);  //10hr 20 min 10 sec

then you find the difference of 10mins which is 600 seconds. 那么您发现10分钟的时间差就是600秒。

Also use below line 也使用下面的行

JOptionPane.showMessageDialog(null, "Here is the racer's name, start time, stop time, and elapsed time:\n" + racer1 + (" - ") + ("Start time: ") + startTime1 + ("; ") + ("Stop time: ") + stopTime1 + ("; ") + ("Elapsed time: ") + elapsedTime1 + "\n");

Hope you understand this. 希望你能理解。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM