如何通过for循环将ArrayList转换为String数组并解决toArray方法报错问题
问题根源
你报错的原因有两个:
data1.get(question)拿到的是ArrayList中单个的元素对象,不是ArrayList集合本身,单个String类型的元素根本没有toArray方法,自然会报找不到符号的错误- 你定义方法时用了无泛型的原始类型
ArrayList,没有指定存储的元素是String类型,编译器无法自动识别元素类型,也会增加类型转换的报错概率
正确实现代码
import java.util.ArrayList; import java.util.Collections; public class YourClassName { // 可以提前声明ranquestions成员变量,或者在方法内做局部声明 private String[] ranquestions; // 方法参数指定泛型为String,避免原始类型问题 public String[] randomQuestion(ArrayList<String> data1) { Collections.shuffle(data1); // 先初始化目标数组,长度和你要取的题目数量对应即可 ranquestions = new String[10]; for (int question = 0; question < 10; question++) { // 直接把遍历拿到的单个String元素存入数组对应位置 ranquestions[question] = data1.get(question); } return ranquestions; } }
实现逻辑说明
- 首先给方法参数的
ArrayList加上<String>泛型约束,明确集合里存的都是字符串,避免隐式类型转换问题 - 进入循环前先初始化长度为10的
String数组ranquestions,给数组分配内存空间 - 循环遍历的每一步直接把
data1中对应下标的字符串元素赋值给数组的对应下标位置,不需要调用toArray方法 - 最终返回的数组就是打乱后取前10道题的结果,你可以直接按下标逐个取元素给用户展示下一题
注意事项
如果传入的data1的长度可能小于10,建议先判断data1.size()的大小,再决定数组长度和循环次数,避免下标越界异常。
内容的提问来源于stack exchange,提问作者UltraInstinctMessi
相关产品推荐
相关产品推荐

