Java将ArrayList中的String转换为int时出错

标签 java string arraylist casting int

我对 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/

相关文章:

java - 实时图表 - ArrayList 转换错误

c - 替换 C 字符字符串中的字符串(strreplace,无 sprintf)

c# - 在 C# 中向字符串添加空格

java -++ 运算符对整数有什么作用?

java - Stackoverflow 是由简单的代码引起的

arrays - Golang 将简单代码数组转换为字符串

java - 从 ArrayList#1 中删除出现在另一个 ArrayList#2 中并且在 ArrayList#1 中不唯一的行

java - 比较 ArrayList 中的字符?

java - 如何在 Android 程序的 Eclipse 中将变量声明为 OpenGL 的 GLuint 类型?

java - 卡夫卡消费者: controlled reading from topic