0

我需要通过调用方法打印出条形图barChartPrinter。即barChartPrinter(5, 6, 2);会打印:5 个 XX 的垂直列后跟一个空格,然后是 6 个 XX 的垂直列和 2 个 XX 的垂直列。

这些数字是基于用户输入的,所以我想我需要收集这些数字并将它们存储在一个数组中。而且我认为会涉及一个 for 循环,但我不确定我会怎么做。

public class BarChart {

    public static void main(String args[]) {
        int[] list = new int[4];
        Scanner input = new Scanner(System.in);
        System.out.println("Enter four integers: ");
        for(int i = 0; i < list.length; i++)
        list[i] = input.nextInt();

        System.out.println();

        barChartPrinter(list);
    }       

    public static void barChartPrinter(int[] numbers) {
        int max = numbers[0];
        for (int i = 0; i < numbers.length; i++)
        if(numbers[i] > max)
            max = numbers[i];
    }
}

这就是我卡住的地方:定义将打印出条形图的方法;给定用户输入值。方法需要以这种格式打印出来,即

barChartPrinter(1, 2, 3, 4) =

出于某种原因,它不会显示条形图应如何在此处构建,因此我将对其进行描述:

首先是一列 XX,然后是一列 XX(其中两列垂直表示 2),然后是另一列 XX(但这次其中三列相互重叠,表示数字 3),最后另一列 XX * 4 垂直。

任何指针?

4

1 回答 1

1

好的,现在我确信您知道创建水平条形图非常容易:

2 6 4

**
******
****

由于控制台的 PrintStream (outof System.out)的 print 和 println 方法水平打印内容。您的作业的诀窍是如何垂直打印此图。为此,您将不得不使用一些逻辑。由于这显然是家庭作业,我不会给你一个解决方案,而是会建议一些选项。

  • 您知道您需要使用某种循环来连续打印行。
  • 一种可能的解决方案是通过首先找到数组保存的最大值来计算在循环之前循环多少次。如果这样做,请使用 for 循环。
  • 您找不到最大的另一种可能的解决方案,而只是循环直到完成。这里使用一个while循环。这将是我要使用的选项,我会使用一个布尔变量,比如命名keepGoing来帮助告诉 while 循环何时继续循环以及何时停止。
  • 如果您使用后一个选项,您将在循环中使用一个 int 计数器来检查您所在的行,并且您将在循环内推进该计数器。
  • 您需要在 while 循环中嵌套一个 for 循环来遍历每个数组项。
  • 您将使用此计数器和数组项(在 while 循环中的 for 循环中)来查看您最终将打印的字符串是否应该"* "添加到其中。
  • 在内部 for 循环之后,您将打印您创建的字符串。
  • 如果不"* "存在(您可以调用myString.trim().isEmpty()),则keepGoing = false;while 循环应该停止。

编辑:您发布的代码有点偏离,因为它告诉用户输入四个数字,但只接受三个。你会想要解决这个问题。


编辑 2 你说:

嘿,对不起,我已经整理了代码。我已经编写了在方法中找到最大值的方法。我现在被困在实际制作图表的步骤上。我知道它将水平打印 XX 的每一行,但我仍然对如何实现这一点感到困惑 - 我知道它将涉及一个 for 循环,但我看不出如何打印每列的 XX ; 抱歉,如果我遗漏了一些明显的东西

再次,通过将大问题分成小步骤来分解你的问题,你能想到的最小的步骤,然后解决每个小步骤。您知道您将必须构造一个要打印的字符串,因此您应该专注于如何构造此字符串,以便在需要的地方出现星号,在列应该出现的地方出现空格不显示星号。尝试提出一个解决方案,甚至是部分解决方案,并将其作为对您问题的编辑发布,就像我如何将此编辑发布到我的答案一样。

于 2013-08-24T14:23:24.510 回答