不确定标题是否有用,但我目前很困惑,不知道如何解决我的问题。
我试图向用户请求,目的地,最长时间段(格式为HH:MM)和最大数量的更改,这是我迄今为止所做的。然后应计算每个旅程的总分钟数以及更改数量,然后将其与用户的标准进行比较,我最近编辑了我的程序以使用case
语句。
它确实链接到包含以下数据的.txt文件:
York
1
60
60
Alnwick
0
130
Alnwick
2
30
20
20
因此,我的程序要求提供目的地,约克或阿尼克,以及一些更改,最长时间等等,但我无法弄清楚如何使其适用于所选目的地,当前的代码可以遵循:
import java.io.FileReader;
import java.util.Scanner;
public class InputOutput {
public static void main(String[] args) throws Exception {
// these will never change (be re-assigned)
final Scanner console = new Scanner(System.in);
final Scanner INPUT = new Scanner(new FileReader("C:\\Users\\Luke\\workspace\\Coursework\\input.txt"));
System.out.print("-- MENU -- \n");
System.out.print("1: Blahblahblah \n");
System.out.print("2: Blahblahblah \n");
System.out.print("Q: Blahblahblah \n");
System.out.print("Pick an option: ");
int option = console.nextInt();
switch(option) {
case 1 :
while(INPUT.hasNextLine()) {
System.out.println(INPUT.nextLine());
}
break;
case 2 :
System.out.print("Specify desired location: ");
String destination = console.next();
System.out.print("Specify Max Time (HH:MM): ");
String choice = console.next();
// save the index of the colon
int colon = choice.indexOf(':');
// strip the hours preceding the colon then convert to int
int givenHours = Integer.parseInt(choice.substring(0, colon));
// strip the mins following the colon then convert to int
int givenMins = Integer.parseInt(choice.substring(colon + 1, choice.length()));
// calculate the time's total mins
int maxMins = (givenHours * 60) + givenMins;
System.out.print("Specify maximum changes: ");
int maxChange = console.nextInt();
// gui spacing
System.out.println();
int mins = INPUT.nextInt();
int change = INPUT.nextInt();
if ((mins > maxMins) || (change > maxChange)) {
System.out.format("Time: %02d:%02d, Changes: %d = Unsuitable \n", (mins / 60), (mins % 60), change);
}
else {
System.out.format("Time: %02d:%02d, Changes: %d = Suitable \n", (mins / 60), (mins % 60), change);
}
//Do stuff
break;
case 3 :
default :
//Default case, reprint menu?
}
}
}
已编辑它以减少StackOverflow问题的大小,但如果需要更多代码请告诉我 - 任何进一步的帮助将不胜感激!
答案 0 :(得分:1)
您应该真正了解扫描仪的工作原理:
int Scanner.nextInt()
返回下一行中出现的下一个int值。String Scanner.next()
返回由默认分隔符(空格" "
)分隔的下一个字符串。 (您可以使用与Scanner.useDelimiter(String)不同的Delimiter)。在默认情况下,这将返回下一个单词。String Scanner.nextLine()
返回以"\n"
字符分隔的下一个完整行。因此,如果您想获得一个目的地,其中有两个单词用于示例“纽约”,您可以像使用Scanner.next()一样获取它。然后你以同样的方式花时间。您将destination="New"
和choice = "York"
无法解析:
并将崩溃。
您遇到的另一个问题是扫描仪从头到尾工作。因此,如果您选择选项1
并打印输入文件中的所有输出,则会到达结尾hasNextLine() == false
。意味着在此之后您无法获得任何INPUT.nextInt()
。但是在那之后选择2
选项时你会尝试
您的prorgamm应首先将输入文件读入一个存储所有信息的数据结构。并在进一步的过程中从那里获取它们。
您现在代码中崩溃的是您开始使用INPUT.nextInt()
读取文本文件,但文本文件的第一行是York
,其中没有Int值。你可以通过添加:
[...]
System.out.println();
INPUT.nextLine(); // skips the first line which is York
int mins = INPUT.nextInt();
int change = INPUT.nextInt();
[...]