ArrayList调用length()方法报错及程序实现疑问求助
问题分析与解决方案
我来帮你一步步解决代码里的问题,同时解答你对题目(b)的疑问:
一、修复cannot find symbol错误
你遇到的java: cannot find symbol错误,根源是ArrayList没有length()方法——这个方法是给数组用的,而ArrayList要获取元素个数得用size()方法。
你代码里的这一行:
int num = name.length()*3;
要改成:
int num = name.size()*3;
不过如果你的预期是让value存储索引值(比如[0,1,2,3,4,5]),那这行逻辑还要调整,我后面会详细说明。
二、Question (b) 实现建议
从你的描述来看,你希望value存储和name元素对应的索引值(也就是每个元素在name里的位置编号)。实现起来很简单:直接把循环的计数器i添加到value里就行。
另外,你的代码没有指定ArrayList的泛型类型,这会导致不必要的强制类型转换,还容易出类型错误。建议给ArrayList指定明确的泛型:
name存储字符串,用ArrayList<String>value存储整数(索引或计算值),用ArrayList<Integer>
三、修正后的完整代码
我把所有问题都修正了,包括重复import、泛型指定、错误方法替换,同时提供了两种value的实现逻辑(对应你的索引预期和原代码的计算逻辑):
import java.util.*; public class Retrieve { public static void main (String[] args) { // 指定泛型,避免类型转换问题,代码更安全 ArrayList<String> name = new ArrayList<>(); ArrayList<Integer> value = new ArrayList<>(); Scanner sc = new Scanner (System.in); /* Question (a) */ String a; for (int i=0; i<5; i++) { System.out.println("Enter name: "); a = sc.nextLine(); name.add(a); } name.add(2, "9"); // 在索引2的位置插入元素,此时name共有6个元素 /* Question (b) */ System.out.println("\n" + name); // 逻辑1:存储每个元素对应的索引值(符合你的预期[0,1,2,3,4,5]) for(int i=0; i < name.size(); i++) { value.add(i); } // 逻辑2:如果你的需求是按原代码的size*3计算,就替换成下面的循环 // for(int i=0; i < name.size(); i++) { // int num = name.size() * 3; // value.add(num); // } System.out.println(value); } }
额外说明
- 重复的
import java.util.ArrayList;可以删掉,因为import java.util.*;已经导入了java.util包下的所有类,包括ArrayList。 - 指定泛型后,你不需要再做
(String) name.get(i)这种强制类型转换,代码更简洁安全。
内容的提问来源于stack exchange,提问作者akma flynn
相关产品推荐
相关产品推荐

