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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 09:36:20