我对 Java 非常陌生。我正在尝试编写一个彩票模拟器。我有以下代码:
Scanner input = new Scanner(System.in);
System.out.println("Enter six whole numbers between 1 and 49 in a comma-separated list: ");
String userNumbersString = input.nextLine();
String[] userNumbersArray = userNumbersString.replaceAll("\\s+","").split(",");
ArrayList userNumbers = new ArrayList(Arrays.asList(userNumbersArray));
boolean validNumbers = true;
for(int v = 0; v <= 6; v++){
if((int)userNumbers.get(v) > 49){
validNumbers = false;
v = 7;
}else{
v++;
}
}
if(validNumbers == false){
String[] str = new String[0];
main(str);
}
编译正确。但是,当我输入一系列数字时,出现此错误:
java.lang.ClassCastException: java.lang.String 无法转换为 java.lang.Integer。
我很困惑为什么这个字符串不能转换为整数。
很抱歉,如果这是一个冗长的问题,但我将非常感谢任何帮助。
我刚刚意识到 OutOfBounds 异常是由于我的一个愚蠢的数学错误造成的; v 从 0 开始;数组中有五个值,但我给了 for 循环条件 <= 6。对此感到抱歉。
感谢大家的帮助。你们一起解决了我的问题。
最佳答案
简单来说
int
是表示 32 位整数的原始类型。
String
是一个引用类型,包裹在 char
数组周围s 表示字符序列。
您不能仅更改 int
的类型至String
并使字符串中的字符序列神奇地变成数字。
考虑一下如何实现此转换。您将查看每个字符,确保它是有效的数字等。
更改:
if((int)userNumbers.get(v) > 49)
致:
if(Integer.parseInt(userNumbers.get(v)) > 49)
此外,在创建像 ArrayList
这样的通用类型容器时出于类型安全原因,请确保您还声明了它们存储的对象类型。
更改:
ArrayList userNumbers = new ArrayList(Arrays.asList(userNumbersArray));
致:
ArrayList<String> userNumbers = new ArrayList<String>(Arrays.asList(userNumbersArray));
这样您就可以调用 userNumber.get()
将返回 String
。
如果你不输入它,它将返回 Object
所以你实际上会打电话 Integer.parseInt(Object)
这是无效的。您会得到一个非常不言自明的错误,如下所示:
The method parseInt(String) in the type Integer is not applicable for the arguments (Object)
编辑:
为了您的IndexOutOfBounds
错误,您正在尝试访问比您拥有的更多的元素。基本上,您想要有 6 个值,但您的 for
循环说from 0 until 6 (included)
。总共有 7 个元素: 0, 1, 2, 3, 4, 5, 6
您可以通过更改 <= 6
来解决此问题至< 6
在你的循环中,但修复它的最佳方法是使用 size()
,以便无论你有多少元素它都可以工作。 ArrayList
的属性(property):
更改:
for(int v = 0; v <= 6; v++)
致:
for(int v = 0; v < userNumbers.size(); v++)
关于Java将ArrayList中的String转换为int时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25953120/