如何修改Java柱状图代码实现星号数量向下取整显示?
修正Java柱状图星号显示问题
我来帮你搞定这个问题!你已经找对了方向——用整数除法计算星号数量,但问题出在for循环的逻辑上,咱们一步步理清楚:
问题根源
你先正确计算了需要的星号数量:int numAsterisks = points / amt_each;(比如48分的话,48/10=4,这正是你要的4个星号),但紧接着的for循环直接把numAsterisks重新赋值为0,然后用了错误的循环条件和步长,导致循环执行了5次,打印出5个星号。
原来的循环逻辑:
for(numAsterisks = 0; numAsterisks < points; numAsterisks += amt_each)
这个循环会在numAsterisks为0、10、20、30、40时执行(这些值都小于48),一共5次,所以打印了5个*,完全偏离了你预期的整数除法结果。
修正后的代码
只需要修改drawChart方法的循环部分,用你计算好的numAsterisks作为循环次数即可:
import java.util.Scanner; public class BarChart2 { public static void main (String[] args) { Scanner input = new Scanner(System.in); int artPoints; int bobPoints; int calPoints; int danPoints; int eliPoints; final int AMT_EACH_ASTERISK = 10; System.out.println("Enter points earned for the season"); System.out.print(" by Art >> "); artPoints = input.nextInt(); System.out.print(" by Bob >> "); bobPoints = input.nextInt(); System.out.print(" by Cal >> "); calPoints = input.nextInt(); System.out.print(" by Dan >> "); danPoints = input.nextInt(); System.out.print(" by Eli >> "); eliPoints = input.nextInt(); System.out.println("\nPoints for Season (each asterisk represents " + AMT_EACH_ASTERISK + " points)\n"); drawChart("Art", artPoints, AMT_EACH_ASTERISK); drawChart("Bob", bobPoints, AMT_EACH_ASTERISK); drawChart("Cal", calPoints, AMT_EACH_ASTERISK); drawChart("Dan", danPoints, AMT_EACH_ASTERISK); drawChart("Eli", eliPoints, AMT_EACH_ASTERISK); } public static void drawChart(String name, int points, int amt_each) { System.out.print(name + ": "); // 计算正确的星号数量(整数除法自动截断小数部分) int numAsterisks = points / amt_each; // 循环numAsterisks次,每次打印一个星号 for(int i = 0; i < numAsterisks; i++) System.out.print("*"); System.out.println(); } }
解释修正点
- 保留了正确的整数除法计算:
int numAsterisks = points / amt_each;,这会自动舍去小数部分(比如48/10=4,59/10=5),符合每个星号代表10分的需求。 - 把for循环改成从0到
numAsterisks的次数循环,每次打印一个星号,这样就会严格按照计算出的数量打印。
现在测试48分的情况,就会显示4个星号啦!
内容的提问来源于stack exchange,提问作者RUSSELL YANG
相关产品推荐
相关产品推荐

