如何解决如何获得在 Java 中输入句子所需的时间
我有一个很复杂的问题,希望能得到一些帮助。 我的老师问了一个家庭作业问题,我们发现输入一个句子“Hello World!”需要多长时间。并使用 Date 类以毫秒为单位打印出来,同时检查它是否正确。 这是我目前所拥有的
vec[index] = std::move(newelement);
我查了一些东西,我正在尝试使用 getTime 方法,但它不允许我使用它。
我的主要想法是使用 getTime 来检查用户输入句子所用的时间,但我完全不知道该怎么做。
解决方法
用 System.nanoTime
计算纳秒
我认为您已经接近了,但该方法需要一些改进。
public static void main(String[] args) {
Scanner hello = new Scanner(System.in);
// starting time
long start = System.nanoTime();
System.out.println("Your job is to type the sentence \"Hello World!\" as fast as you can.");
System.out.println("When you are ready,press enter,type the sentence,and press enter again.\n");
String sen = hello.nextLine();
while (!sen.equals("Hello World!")) {
System.out.println("Incorrect Input");
sen = hello.nextLine();
}
// end time
long elapsedTime = System.nanoTime() - start;
System.out.println("It took you "elapsedTime"ns to type Hello World!");
}
,
java.util
的日期时间 API 及其格式化 API SimpleDateFormat
已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API。出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。
使用现代日期时间 API:
import java.time.Instant;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner hello = new Scanner(System.in);
System.out.println("Your job is to type the sentence \"Hello World!\" as fast as you can.");
System.out.println("When you are ready,and press enter again.");
System.out.println("");
long start = Instant.now().toEpochMilli();
String sen = hello.nextLine();
if (sen.equals("Hello World!")) {
System.out.println("You took " + (Instant.now().toEpochMilli() - start) + " milliseconds");
} else {
System.out.println("Incorrect Input");
}
}
}
示例运行:
Your job is to type the sentence "Hello World!" as fast as you can.
When you are ready,and press enter again.
Hello World!
You took 4711 milliseconds
从 Trail: Date Time 了解现代日期时间 API。
此外,使用 String#equals
而不是 ==
来比较字符串。
如果您需要使用 java.util.Date
:
import java.util.Date;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner hello = new Scanner(System.in);
System.out.println("Your job is to type the sentence \"Hello World!\" as fast as you can.");
System.out.println("When you are ready,and press enter again.");
System.out.println("");
Date date = new Date();
long start = date.getTime();
String sen = hello.nextLine();
if (sen.equals("Hello World!")) {
date = new Date();
long end = date.getTime();
System.out.println("You took " + (end - start) + " milliseconds");
} else {
System.out.println("Incorrect Input");
}
}
}
,
其他答案是正确的,最好使用System.nanotime()
或Instant
(所以你的老师错了)。无论如何,由于您必须使用 Date
,因此我将尝试解释您尝试使用 getTime
方法时出了什么问题。因为您是对的:如果您使用的是旧的且设计不佳的 Date
类,请使用其 getTime
方法。
您也调用了自己的类 Date
。所以这里有两个类名相同的类在玩,这就产生了麻烦。当你这样做时:
Date d1 = new Date();
——那么您正在创建您自己的 Date
类的实例,而不是您的老师(可能)所指的 java.util.Date
类的实例。例如,当您下次尝试时(您没有在问题中向我们展示,但您应该这样做):
long time = d1.getTime();
——然后 Java 发现您自己的 Date
类没有 getTime
方法并发出错误消息。
TL;DR 解决方案是调用您自己的类而不是 Date
。
PS 有一些方法可以处理两个具有相同名称的类,但它从来没有那么容易阅读,我不建议在此处使用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。