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

Java编程求助:如何从其他类数组打印指定行及统计书籍类型数量

Java编程问题解答:数组行打印与书籍管理功能实现

嘿,作为编程新手遇到这些问题太正常啦,我来一步步给你拆解解决方法,保证易懂好上手~


问题1:从其他类的数组中打印指定行

首先要明确:如果要访问其他类里的数组,得确保这个数组是可访问的——要么把数组设为public(不推荐,破坏封装规范),要么给这个类写一个getter方法来获取数组(更专业的做法)。

举个实打实的例子:
首先写一个存放数组的类(比如叫DataClass):

// 存放数组的其他类
class DataClass {
    // 用private封装数组,避免外部直接修改,通过getter暴露
    private String[][] bookData = {
        {"Java核心技术", "技术"},
        {"百年孤独", "小说"},
        {"人类简史", "科普"}
    };

    // 获取数组的getter方法
    public String[][] getBookData() {
        return bookData;
    }
}

然后在你的主类里,就可以这么操作来打印指定行:

public class Main {
    public static void main(String[] args) {
        // 创建其他类的实例
        DataClass dataObj = new DataClass();
        // 通过getter拿到数组
        String[][] bookArray = dataObj.getBookData();
        
        // 要打印第2行?注意数组索引从0开始,所以第2行对应索引1
        int targetRow = 1;
        
        // 先判断索引是否合法,避免数组越界报错
        if (targetRow >= 0 && targetRow < bookArray.length) {
            // 遍历该行的所有元素并打印
            for (String item : bookArray[targetRow]) {
                System.out.print(item + " ");
            }
        } else {
            System.out.println("指定的行不存在哦!");
        }
    }
}

运行后就会输出:百年孤独 小说,完美~


问题2:控制台书籍管理程序:打印小说与统计特定类型数量

你的需求是:输入add加书,print打所有书,还要实现仅打印小说和统计特定类型书籍数量。首先建议你用类来封装书籍信息,比直接用数组更清晰好维护,然后用ArrayList来存书籍(比普通数组灵活,能动态添加)。

第一步:定义Book类封装书籍信息

class Book {
    private String bookName; // 书名
    private String bookType; // 书籍类型

    // 构造方法,创建书籍对象时直接传入书名和类型
    public Book(String bookName, String bookType) {
        this.bookName = bookName;
        this.bookType = bookType;
    }

    // 获取类型的getter方法(后续筛选需要用到)
    public String getBookType() {
        return bookType;
    }

    // 获取书名的getter方法
    public String getBookName() {
        return bookName;
    }

    // 重写toString方法,方便直接打印书籍信息
    @Override
    public String toString() {
        return "书名:" + bookName + " | 类型:" + bookType;
    }
}

第二步:完善你的App主程序

我把功能都整合进去了,代码里加了详细注释,你一看就懂:

import java.util.*;

public class App {
    // 用ArrayList存储书籍,支持动态添加,比普通数组好用
    private static List<Book> bookList = new ArrayList<>();
    private static Scanner scanner = new Scanner(System.in); // 接收控制台输入

    public static void main(String[] args) {
        System.out.println("🎉 欢迎使用书籍管理程序!");
        System.out.println("指令说明:add=添加书籍 | print=打印所有书籍 | printNovel=打印小说 | count 类型=统计该类型数量 | exit=退出程序");
        
        // 循环接收指令,直到输入exit退出
        while (true) {
            System.out.print("\n请输入指令:");
            String command = scanner.nextLine().trim();

            // 统一转成小写,避免大小写敏感
            switch (command.toLowerCase()) {
                case "add":
                    addNewBook();
                    break;
                case "print":
                    printAllBooks();
                    break;
                case "printnovel":
                    printOnlyNovels();
                    break;
                case "exit":
                    System.out.println("👋 程序已退出,再见!");
                    scanner.close();
                    return; // 终止程序
                default:
                    // 处理统计指令,比如输入count 小说
                    if (command.startsWith("count")) {
                        // 截取指令里的类型部分
                        String targetType = command.substring(6).trim();
                        countBooksByType(targetType);
                    } else {
                        System.out.println("❌ 未知指令,请重新输入!");
                    }
            }
        }
    }

    // 添加书籍的方法
    private static void addNewBook() {
        System.out.print("请输入书名:");
        String name = scanner.nextLine().trim();
        System.out.print("请输入书籍类型:");
        String type = scanner.nextLine().trim();
        // 把新书籍加入列表
        bookList.add(new Book(name, type));
        System.out.println("✅ 书籍添加成功!");
    }

    // 打印所有书籍
    private static void printAllBooks() {
        if (bookList.isEmpty()) {
            System.out.println("📚 当前暂无书籍!");
            return;
        }
        System.out.println("📖 所有书籍列表:");
        for (Book book : bookList) {
            System.out.println(book);
        }
    }

    // 仅打印小说的方法
    private static void printOnlyNovels() {
        System.out.println("📖 所有小说书籍:");
        boolean hasNovel = false; // 标记是否有小说
        for (Book book : bookList) {
            // 用equalsIgnoreCase忽略大小写,输入"小说""XIAOSHUO"都能匹配
            if ("小说".equalsIgnoreCase(book.getBookType())) {
                System.out.println(book);
                hasNovel = true;
            }
        }
        if (!hasNovel) {
            System.out.println("📚 当前暂无小说书籍!");
        }
    }

    // 统计特定类型书籍数量的方法
    private static void countBooksByType(String targetType) {
        int count = 0;
        for (Book book : bookList) {
            if (targetType.equalsIgnoreCase(book.getBookType())) {
                count++;
            }
        }
        System.out.println("📊 类型为【" + targetType + "】的书籍共有 " + count + " 本");
    }
}

新手友好说明

  • 为什么用ArrayList:普通数组长度是固定的,添加新书籍时还要手动扩容,ArrayList会自动帮你处理,省心!
  • Book类的好处:把书名和类型绑定在一起,后续筛选、统计时直接拿类型判断就行,比用二维数组混乱存数据清晰多了。
  • 指令处理:用switch和条件判断覆盖所有需求,printOnlyNovels就是遍历所有书籍,判断类型是小说就打印;countBooksByType则遍历计数。
  • 忽略大小写:用equalsIgnoreCase而不是equals,用户输入“小说”“xiaoshuo”都能识别,体验更好~

内容的提问来源于stack exchange,提问作者Alex Cristea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:48:22