0

method からの呼び出しを介して、棒グラフを印刷する必要があります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 を表すために縦に 2 つ)、次に XX の別の列 (ただし、今回は 3 つを重ねて数字の 3 を表す)、そして最後にXX * 4 の別の列を垂直に。

ポインタはありますか?

4

1 に答える 1

1

OK、ここまでで、横棒グラフを簡単に作成できることがおわかりいただけたと思います。

2 6 4

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

コンソールの PrintStream ( outof System.out) の print および println メソッドは、物事を水平に印刷するためです。課題のコツは、このグラフをに印刷する方法です。そのためには、ちょっとしたロジックを使用する必要があります。これは明らかに宿題なので、解決策を提供するつもりはありませんが、選択肢を提案します。

  • 行を連続して印刷するには、ある種のループを使用する必要があることを知っています。
  • 考えられる解決策の 1 つは、最初に配列が保持する最大値を見つけることによって、ループの前にループする回数を把握することです。これを行う場合は、for ループを使用します。
  • 別の可能な解決策は、最大ではなく、ループするだけです。ここでは while ループを使用します。これは私が使用するオプションであり、keepGoingループを継続するタイミングと停止するタイミングを while ループに伝えるのに役立つ名前付きのブール変数を使用します。
  • この後者のオプションを使用する場合は、ループ内で int カウンターを使用して現在の行を確認し、ループ内でこのカウンターを進めます。
  • 各配列項目を処理するには、while ループ内に for ループをネストする必要があります。
  • このカウンターと配列項目 (while ループ内の for ループ内) を使用して、最終的に出力する文字列に"* "追加する必要があるかどうかを確認します。
  • 内側の for ループの後、作成した文字列を出力します。
  • no"* "が存在する場合 ( を呼び出すことができますmyString.trim().isEmpty())、keepGoing = false;および while ループは停止します。

編集:投稿されたコードは、ユーザーに4つの数字を入力するように指示しているが、3つしか受け入れないという点で少しずれています。これを修正する必要があります。


編集2 あなたは次のように述べています:

すみません、コードを整理しました。メソッド内で最大値を見つける方法をコーディングしました。現在、実際にチャートを作成する段階で立ち往生しています。XXの各行を水平に印刷することは知っていますが、これを達成する方法についてはまだ困惑しています-forループが含まれることはわかっていますが、各列のXXを印刷する方法がわかりません; 明らかな何かが欠けている場合はお詫びします

繰り返しになりますが、大きな問題を小さなステップ (考えられる最小のステップ) に分割して問題を分割し、それぞれの小さなステップを解決してください。印刷する文字列を構築する必要があることはわかっているので、この文字列を構築する方法に焦点を当てて、必要な場所にアスタリスクが存在し、列が存在する必要がある場合にスペースが存在するようにする必要があります。アスタリスクを表示しません。この編集を私の回答に投稿するのと同じように、部分的な解決策であっても解決策を考え出し、それを編集として質問に投稿してください。

于 2013-08-24T14:23:24.510 に答える