Java存储对象的数组打印时无法显示String类型值如何解决
问题原因
- Scanner输入逻辑存在错误:
scanner.nextInt()方法只会读取输入的整数值,不会消费整数末尾的换行符;且你在读取商品编码后额外调用了一次scanner.nextLine(),会导致第一次输入后,后续循环读取商品编码时要么读到空字符串,要么读取逻辑错位,最终productCode字段赋值异常。 - 自定义
Bill类未重写toString()方法:Java中直接打印对象默认会调用Object类的toString()方法,输出格式为类全限定名@哈希值,不会按照你需要的格式输出类属性值。
修复方案
1. 修正Scanner输入逻辑
删除读取商品编码后多余的scanner.nextLine(),每次读取完整数后主动调用scanner.nextLine()消费遗留的换行符,修正后代码如下:
for(int i = 0; i < billsList.length; i++) { System.out.println("Digit the code of the product: "); productCode = scanner.nextLine(); System.out.println("Digit the kilos sold: "); kilos = scanner.nextInt(); System.out.println("Digit the price: "); price = scanner.nextInt(); // 消费nextInt遗留的换行符,避免影响下一次nextLine读取 scanner.nextLine(); Bill bills = new Bill(productCode,kilos,price); billsList[i] = bills; }
2. 给Bill类重写toString()方法
在Bill类中添加自定义toString()方法,指定对象的打印格式,示例如下:
@Override public String toString() { return "productCode:" + productCode + ",kilosSold:" + kilosSold + ",price:" + price; }
修改完成后直接打印Bill对象即可正常输出所有属性值。
内容的提问来源于stack exchange,提问作者Jose Erasmo Hernandez Yate
相关产品推荐
相关产品推荐

