Как определить, сколько звездочек напечатано в этом коде? - PullRequest
0 голосов
/ 09 января 2020

Задание, над которым я работаю, просит меня изменить программу с гистограммой, которую они мне предоставили. До сих пор я думаю, что у меня все правильно, хотя в нем указано, что «если игрок набрал 48 очков, тогда отображаются четыре звездочки». Тем не менее, мой код отображает пять звездочек, когда игрок набрал 48 очков. Как сделать так, чтобы на нем отображались только 4 звездочки? Мой инструктор упомянул использование целочисленного деления в моем для l oop, которое я использовал, но это не сработало.

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) { // Main issue here
              System.out.print(name + ":  ");
        int numAsterisks = points / amt_each;
      for(numAsterisks = 0; numAsterisks < points; numAsterisks += amt_each)
             System.out.print("*");
            System.out.println();
    }
}

1 Ответ

1 голос
/ 09 января 2020

Ну, вы в основном делаете правильный расчет (целочисленное деление) здесь: int numAsterisks = points / amt_each; (в результате получится 48/10 = 4).

Однако вы затем отбрасываете это значение, повторно инициализируя numAsterisks в 0 в вашем l oop (for(numAsterisks = 0; ...)).

Вместо этого сделайте что-то вроде this:

for(int i= 0; i < numAsterisks; i++) {
   System.out.print("*");
}
System.out.println();

Обратите внимание, что я добавил фигурные скобки к телу l oop, чтобы прояснить, что принадлежит l oop, а что нет. Это предназначено для предотвращения ошибок, которые могут возникнуть из , если предположить , что операторы типа System.out.println(); будут частью тела из-за их отступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...