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
相关产品推荐
相关产品推荐

