为何调用toString()方法打印后程序未添加空白行?
解决ArrayList输出换行分隔失效的问题
问题根源
你使用System.out.println(c.toString() + "\n\n")时,println方法会自动在输出内容末尾追加一个换行符,导致手动添加的\n\n和方法自带的换行叠加后,没有达到预期的空行分隔效果;再结合你提供的输出结果来看,当前写法的换行逻辑完全没有生效,核心问题出在println的自动换行特性与手动换行的冲突上。
修复方案
方案1:替换println为print
去掉println自带的自动换行,仅依赖手动添加的\n\n实现分隔:
for(Bicycle c : Bikes){ if(c instanceof MountainBike){ ((MountainBike) c).setHeight(99); System.out.println("New Mountain Bike Info: "); System.out.print(c.toString() + "\n\n"); } if(c instanceof TandemBike){ ((TandemBike) c).setBetweenSpace(88); System.out.println("New Tandem Bike Info: "); System.out.print(c.toString() + "\n\n"); } if(c instanceof RoadBike){ ((RoadBike) c).setHandlebarType("NewType"); System.out.println("New Road Bike Info: "); System.out.print(c.toString() + "\n\n"); } }
方案2:单独输出空行
用无参的println()输出空行,逻辑更直观清晰:
for(Bicycle c : Bikes){ if(c instanceof MountainBike){ ((MountainBike) c).setHeight(99); System.out.println("New Mountain Bike Info: "); System.out.println(c.toString()); // 输出两个空行实现分隔 System.out.println(); System.out.println(); } if(c instanceof TandemBike){ ((TandemBike) c).setBetweenSpace(88); System.out.println("New Tandem Bike Info: "); System.out.println(c.toString()); System.out.println(); System.out.println(); } if(c instanceof RoadBike){ ((RoadBike) c).setHandlebarType("NewType"); System.out.println("New Road Bike Info: "); System.out.println(c.toString()); System.out.println(); System.out.println(); } }
额外优化
由于一个Bicycle实例只会是MountainBike/TandemBike/RoadBike中的一种,把三个独立if改成else if可以减少不必要的判断,提升代码效率:
for(Bicycle c : Bikes){ if(c instanceof MountainBike){ ((MountainBike) c).setHeight(99); System.out.println("New Mountain Bike Info: "); System.out.println(c.toString()); System.out.println(); System.out.println(); } else if(c instanceof TandemBike){ ((TandemBike) c).setBetweenSpace(88); System.out.println("New Tandem Bike Info: "); System.out.println(c.toString()); System.out.println(); System.out.println(); } else if(c instanceof RoadBike){ ((RoadBike) c).setHandlebarType("NewType"); System.out.println("New Road Bike Info: "); System.out.println(c.toString()); System.out.println(); System.out.println(); } }
内容的提问来源于stack exchange,提问作者Aaron Hall
相关产品推荐
相关产品推荐

