Java 在系统检查异常之前,如何允许输入三个整数,后跟一个空格和一个单词?
这是一个家庭作业,我为这个愚蠢的问题道歉,我似乎无法破解它,我已经尝试了一些方法,包括Java 在系统检查异常之前,如何允许输入三个整数,后跟一个空格和一个单词?,java,exception,exception-handling,Java,Exception,Exception Handling,这是一个家庭作业,我为这个愚蠢的问题道歉,我似乎无法破解它,我已经尝试了一些方法,包括.hasInt()。我的代码用于检查用户是否正在输入整数。在我希望允许用户输入“5小时10分钟15秒”后,buy将不允许任何操作。到目前为止,我只能允许他们输入“5 10 15”,其他任何东西都会被异常捕获,并要求他输入有效的数字。这是代码 import java.util.*; public class TimetoSeconds { public static void main(String[] arg
.hasInt()代码>。我的代码用于检查用户是否正在输入整数。在我希望允许用户输入“5小时10分钟15秒”后,buy将不允许任何操作。到目前为止,我只能允许他们输入“5 10 15”
,其他任何东西都会被异常捕获,并要求他输入有效的数字。这是代码
import java.util.*;
public class TimetoSeconds
{
public static void main(String[] args)
{
System.out.println("Time converter");
System.out.println();
//start scanner and variables
Scanner sc = new Scanner(System.in);
int x = 60;
String choice = "y";
while (choice.equalsIgnoreCase("y"))
{
//catch exceptions
int hours = 0;
int minutes = 0;
int seconds = 0;
try
{
// get user input
System.out.print("Enter time in hours (space), minutes (space), and
seconds: ");
hours = sc.nextInt();
minutes = sc.nextInt();
seconds = sc.nextInt();
System.out.println();
}
catch (InputMismatchException e)
{
sc.nextLine();
System.out.print("Error! Invalid number. Try again.\n");
continue;
}
int sec1 = (hours * x) * x;
int sec2 = minutes * x;
int totalSec = sec1 + sec2 + seconds;
System.out.print("Total seconds are: " + totalSec + "\n");
System.out.println();
System.out.print("Continue? (y/n): ");
choice = sc.next();
System.out.println();
}
}
}
把这部分换一下
System.out.print("Enter time in hours (space), minutes (space), and seconds: ");
hours = sc.nextInt();
sc.next();
minutes = sc.nextInt();
sc.next();
seconds = sc.nextInt();
sc.next();
那么你的程序工作正常
Time converter
Enter time in hours (space), minutes (space), and seconds: 5 hours, 10 minutes, 12 seconds
Total seconds are: 18612
Continue? (y/n): y
Enter time in hours (space), minutes (space), and seconds: 3 hours, 10 minutes, 20 seconds
Total seconds are: 11420
Continue? (y/n): n
但这很容易出错。我宁愿读整个大字符串
用户输入的时间,例如“5小时、10分钟、20秒”,然后
从那里提取我需要的任何东西(我只需要3个数字)。
什么是容易出错的?因为如果用户键入“5小时10分钟20秒”,
它仍然会将此检测为无效输入(因为逗号没有粘在单词上)。您可以使用nextLine
读取整个字符串,然后使用split
获取数字:
System.out.print("Enter time in hours (space), minutes (space), and seconds: ");
String line = sc.nextLine();
String values[] = line.trim().split("[^0-9]+");
split
的参数是正则表达式;它将一个或多个非数字的任何序列视为分隔符,并返回分隔符之间的子字符串。因此,values[]
的所有元素都将是只有数字的字符串(除了values[0]
可以是空字符串),您可以使用Integer.parseInt
获取实际整数。您还可以轻松地检查以确保他们输入了正确的整数数trim()
只需去掉前导空格和尾随空格,这样如果它们输入“5 10 15”
,它仍然可以工作。(但如果他们输入“给我5,10,15”
,值[0]
将是”
,值[1]
将是“5”
,等等)这种解决方案不会让用户像使用扫描仪的下一步那样在单独的行中输入数字。如果需要在单独的行上输入,则如果不使用循环和一些额外的逻辑,上述解决方案将无法工作。可能使用StringTokenizer
。是指向java api中stringtokenizer的链接
它允许您定义分隔符并获取这些分隔符拆分的子字符串。您的问题是什么?请记住,数字是整数,单词是字符串。如果你告诉它你想要接受整数,你只能得到它们。你需要接受一个字符串并对其进行解析。你已经学习了正则表达式吗?请给出一些关于你的问题到底是什么的信息。你想让用户做什么,不想做什么?他应该能进入“10分钟”吗?它应该只过滤掉“10”吗?或者它还应该计算它的秒数吗?它应该计算所有的整数并省略单词。所以,是的,它应该只过滤掉单词。不,我还没有学过正则表达式。好的,是的,它工作得很好。所以我猜这个概念是省略数字后面的任何其他字符串,对吗?但它怎么仍然容易出错呢?我不太确定我是否明白这个解释。它在每个数字之间省略了一个字符串。这很容易出错,因为用户可能会在那里键入两个字符串,正如我用逗号显示的那样。