Java报错:Scanner(String)未定义,如何通过输入向ArrayList加元素?
解决Scanner调用错误与ArrayList元素添加问题
嘿,我来帮你搞定这个报错和代码逻辑问题~
首先,咱们先拆解你遇到的两个核心问题:
1. 直接导致报错的原因:错误调用Scanner方法
你代码里的sc.Scanner(System.in.toString())完全不符合Scanner的使用逻辑:
- 你已经通过
Scanner sc = new Scanner(System.in);创建了一个Scanner实例sc,Scanner类的实例并没有Scanner()这个方法,这就是IDE提示“Scanner(String) is undefined for the type Scanner”的直接原因。 - 要读取用户输入的内容,你应该用Scanner提供的输入读取方法,比如
nextLine()(读取整行输入)或者next()(读取空格分隔的单个单词)。
2. ArrayList元素添加的逻辑错误
Grocery.add(...)这行也有问题:
- 你的购物车集合是
cart(类型为ArrayList<Grocery>),要往里面加元素,应该调用集合的add()方法,也就是cart.add(...),而不是直接调用Grocery类的add方法(除非你特意写了静态的add方法,但显然这里不是你的意图)。 - 你需要先创建一个
Grocery类的实例,把用户输入的内容传递给这个实例,再把实例添加到集合中。
修正后的代码示例
假设你的Grocery类有一个接收商品名称的构造方法(比如public Grocery(String name)),修正后的代码应该是这样的:
import java.util.ArrayList; import java.util.Scanner; public class YourShoppingCart { // 替换成你的实际类名 public static void main(String[] args) { ArrayList<Grocery> cart = new ArrayList<Grocery>(); Scanner sc = new Scanner(System.in); System.out.println("What grocery do you want to put in your cart??"); // 读取用户输入的商品名称 String groceryName = sc.nextLine(); // 创建Grocery实例 Grocery newItem = new Grocery(groceryName); // 将实例添加到购物车集合 cart.add(newItem); // 可选:验证元素是否添加成功 System.out.println("Successfully added: " + cart.get(0).toString()); sc.close(); // 记得用完关闭Scanner,避免资源泄漏 } }
如果你的Grocery类有更多属性(比如价格、数量),只需要调整实例化的代码,传入对应的参数即可,但核心逻辑都是:读取输入 → 创建类实例 → 添加到集合。
内容的提问来源于stack exchange,提问作者Jose Enriquez
相关产品推荐
相关产品推荐

