Java ArrayList字符串值获取及图书登记程序报错求助
一、如何从ArrayList中获取String类型值
- 如果ArrayList声明时指定泛型为
String(即ArrayList<String>),直接通过索引调用get()方法即可获取:ArrayList<String> miLista = new ArrayList<>(); miLista.add("Hola"); String valor = miLista.get(0); // 获取索引0处的String值 - 如果ArrayList未指定泛型(原始类型),需先判断元素类型再强制转换,避免类型转换异常:
ArrayList miLista = new ArrayList<>(); miLista.add("Hola"); if (miLista.get(0) instanceof String) { String valor = (String) miLista.get(0); }
二、图书登记程序错误排查
你的代码存在以下关键问题,逐一修正即可解决运行错误:
1. 循环条件错误
原循环for (int i=0; i>cantidadLibros; i++)的条件逻辑颠倒,i > cantidadLibros会导致循环直接跳过(初始i=0永远小于输入的图书数量),应改为i < cantidadLibros。
2. Scanner输入缓冲区残留换行符
scan.nextInt()读取整数后,输入缓冲区会遗留换行符,后续scan.nextLine()会直接读取这个空行,导致ISBN、书名等字符串被错误赋值为空。解决方法是在每次scan.nextInt()后添加scan.nextLine()消费换行符。
3. 不必要的匿名内部类
创建Libro对象时,new Libro(ISBN, Titulo, Autor, numPag) {}是创建Libro的匿名子类,完全多余,直接写成new Libro(ISBN, Titulo, Autor, numPag)即可。
4. 变量未初始化
libroMayorPaginas()中的maxTitulo未初始化,若图书列表为空或所有图书页数不大于0,会触发编译/运行错误,需初始化为空字符串或提前判断列表状态。
5. 逻辑错误:混淆作者与书名
筛选页数最多的图书时,maxTitulo = l.getAutor();错误地将作者名赋值给存储书名的变量,应改为maxTitulo = l.getTitulo();。
修正后的完整代码片段
public static void registrarLibros() { int cantidadLibros, numPag; String ISBN, Titulo, Autor; System.out.print("Ingrese la cantidad de libros a registrar: "); cantidadLibros = scan.nextInt(); scan.nextLine(); // 消费换行符 for (int i=0; i < cantidadLibros; i++) { System.out.print("ISBN del libro " + i + ": "); ISBN = scan.nextLine(); System.out.print("Titulo del libro " + i + ": "); Titulo = scan.nextLine(); System.out.print("Autor del libro " + i + ": "); Autor = scan.nextLine(); System.out.print("Cantidad de paginas del libro " + i + ": "); numPag = scan.nextInt(); scan.nextLine(); // 消费换行符,避免下一次循环读取空行 Libro libro = new Libro(ISBN, Titulo, Autor, numPag); libros.add(libro); } } public static void mostrarDatos() { for (Libro l: libros) { System.out.println(l.toString()); } } public static void libroMayorPaginas() { if (libros.isEmpty()) { System.out.println("No hay libros registrados."); return; } int maxPag = 0; String maxTitulo = ""; for (Libro l: libros) { if (maxPag < l.getNumeroPaginas()) { maxPag = l.getNumeroPaginas(); maxTitulo = l.getTitulo(); // 改为获取书名 } } System.out.print("El libro con mayor cantidad de paginas es " + maxTitulo + " con " + maxPag + " paginas."); } public static void main(String[] args) { //Registrar libros registrarLibros(); //Mostrar datos mostrarDatos(); //Calcular el libro con mayor cantidad de paginas libroMayorPaginas(); }
内容的提问来源于stack exchange,提问作者Emanuel Leite
相关产品推荐
相关产品推荐

