You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:32:49