Scanner与字母ArrayList问题:声明courses数组列表遇代码问题,需实现打印功能
嘿,我来帮你搞定这个问题!看起来你在声明courses ArrayList和处理课程+对应备注的打印时遇到了麻烦,我给你整理了完整的解决方案,一步步来:
1. 先搞定
courses ArrayList的正确声明 很多时候声明失败的原因要么是没导入必要的包,要么是泛型使用不规范。考虑到你需要存储课程和对应备注,最清晰的方式是自定义一个Course类来封装这两个属性,然后把ArrayList的泛型指定为这个类。
首先要记得在代码顶部导入ArrayList和Scanner的包:
import java.util.ArrayList; import java.util.Scanner;
然后定义Course类:
class Course { // 封装课程名称和备注属性 private String courseName; private String note; // 构造方法,用于创建Course对象 public Course(String courseName, String note) { this.courseName = courseName; this.note = note; } // Getter方法,方便后续打印时获取属性值 public String getCourseName() { return courseName; } public String getNote() { return note; } }
接下来就能正确声明courses ArrayList了:
ArrayList<Course> courses = new ArrayList<>();
2. 结合Scanner实现输入 + 打印功能
下面是完整的可运行代码,包含了Scanner输入课程和备注,以及打印所有课程信息的逻辑:
public class CourseManager { public static void main(String[] args) { // 正确声明courses ArrayList ArrayList<Course> courses = new ArrayList<>(); Scanner scanner = new Scanner(System.in); // 循环输入课程,直到用户输入"exit"结束 while (true) { System.out.print("请输入课程名称(输入exit结束输入):"); String courseName = scanner.nextLine(); // 退出条件 if (courseName.equalsIgnoreCase("exit")) { break; } System.out.print("请输入该课程的备注:"); String note = scanner.nextLine(); // 将课程和备注封装成Course对象,添加到ArrayList中 courses.add(new Course(courseName, note)); System.out.println("课程已添加!\n"); } scanner.close(); // 调用打印方法 printCourseDetails(courses); } // 专门的打印方法,实现课程及对应备注的输出 private static void printCourseDetails(ArrayList<Course> courses) { System.out.println("\n===== 课程列表及备注 ====="); if (courses.isEmpty()) { System.out.println("暂无课程记录"); return; } // 遍历ArrayList,逐个打印课程信息 for (int i = 0; i < courses.size(); i++) { Course currentCourse = courses.get(i); System.out.printf("第%d门课程:%s\n备注:%s\n", i+1, currentCourse.getCourseName(), currentCourse.getNote()); System.out.println("-------------------------"); } } }
3. 常见故障排查
如果你的代码还是有问题,可以检查这几个点:
- 忘记导入包:没有
import java.util.ArrayList;或import java.util.Scanner;会直接导致编译错误,一定要加上。 - Scanner输入的换行坑:如果之前用了
nextInt()之类的方法,记得要额外调用一次scanner.nextLine()吃掉换行符,否则会跳过后续的nextLine()输入。上面的示例全程用nextLine(),避免了这个问题。 - 泛型使用错误:如果直接写
ArrayList courses(不带泛型),虽然能运行,但会有警告,而且后续处理数据时需要强制类型转换,非常不推荐。
内容的提问来源于stack exchange,提问作者user9281020
相关产品推荐
相关产品推荐

