我想让用户输入一个0到180之间的数字。但变量必须是字符串。
// Saisie du nombre de jours de location
System.out.println("Entrez le nombre de jours de location (supérieur à 0 et inférieur ou égal à 180) : ");
nbJoursLouer = Clavier.lireString();
while ( nbJoursLouer < "0" || nbJoursLouer > "180") {
System.out.println("Entrée invalide !");
System.out.println("Entrez le nombre de jours de location (supérieur à 0 et inférieur ou égal à 180) : ");
nbJoursLouer = Clavier.lireString();
}
当我运行并输入字母而不是数字时,我得到以下消息:
Entrez le nombre de jours de location (supérieur à 0 et inférieur ou égal à 180) :
d
Exception in thread "main" java.lang.NumberFormatException: For input string: "d"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:668)
at java.base/java.lang.Integer.parseInt(Integer.java:786)
at Tp1.main(Tp1.java:100)
2条答案
按热度按时间knpiaxh11#
在Java中不能使用
<
和>
来表示String,这是一个编译错误。最接近的等价物是String.compareTo(String)
,它不会按照你的意图工作:“100”将小于“18”,因为字符串是按字典顺序排序的,Java不会像JavaScript那样“聪明”,因此,必须显式地将字符串转换为整数,请看this related question for how to useInteger.parseInt()
。您共享的错误消息显示
Integer.parseInt()
在某个地方使用。它试图通过逐个字符阅读字符串来将其转换为数字。但当它遇到对整数无效的字符时(字母、特殊字符...),它将失败,但会出现您所看到的异常。通过使用try-catch
子句,您可以对此做出React,并通过返回与代码中类似的错误消息来处理它。disho6za2#
u必须将字符串转换为整数
nbJoursLouer变量不是数字
只是个字母“d”
你的密码错了。