0

このコーディングを手伝っていただければ幸いです。棒グラフを作成しようとしていますが、うまくいかないようです。以下の出力を作成しようとしていますが、実行すると[Red, Yellow, Blue](0)繰り返しになります。これで解決に近づいた気がします。誰かが私にできることを正しい方向に押し進めることができれば、それは大歓迎です.

import java.util.HashSet;
import java.util.Arrays;
import java.util.Set;
public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        //These arrays are not to be modified and should only use these 2 arrays.
        short[] points ={1,2,1,1,1,1,1,1,3,4,1,5};
        String[] teams ={"Red","Yellow","Blue","Blue","Blue","Red","Yellow","Red","Yellow","Red","Blue","Blue"};
        Set<String> uniqueTeams = new HashSet<String>(Arrays.asList(teams));
        Barchart(points, teams, uniqueTeams);
    }

    public static void Barchart(short[] points, String[] teams, Set<String> uniqueTeams){
        byte count=0;
        for(int index=0; index < points.length; index++){
            if(teams.equals(uniqueTeams)){
                count++;
            }
        }
        for(int index=0; index < points.length; index++){
            System.out.println(uniqueTeams + "("+ count + ")");
        }

    }
}

//Output should look like this:
//
//Red(7): *******
//
//Yellow(6): ******
//
//Blue(9): *********

別の方法でそれを行う方法のアイデアはありますが、方法がわかりません。誰かが以下のこの質問に答えることができれば. チームの配列で行うことの倍数を持たずに、新しい配列を取得または作成するにはどうすればよいですか? したがって、配列は String[] uniqueTeams = {"Red, "Yellow", "Blue"}; のようになりますが、それを初期化または宣言するのではなく、それが理にかなっている場合はプログラム自体を作成する方法を作成します。

4

1 に答える 1

0

直接印刷していuniqueTeamsます。uniqueTeamsタイプSetです。あなたがしなければならないことは、セット内の各アイテムを循環し、それらの横に星を印刷することです.

OOPアプローチ

私だったら、すべてを別々のデータ構造にすることはできず、非常に厄介なコードになります。Bar値と名前を含むオブジェクトを作成してみませんか。次に、タイプのコレクションを循環し、オーバーライドするメソッドBarを呼び出すだけです。toString()

私がここにいる間

OOP のアプローチを段階的に説明したほうがよいと思います。オブジェクト指向プログラミングでは、同様のデータをオブジェクトに含めたいと考えています。たとえば、バーの名前と値は作成するのに最適なオブジェクトです。すべてのデータはクラスに関連しています。

class Bar
{
private int count;
private String name;
    // Some values here to store the count and the name of the bar.

public Bar(String name, int count)
{
            // Assign those values in the constructor.
    this.name = name;
    this.count = count;
}
// Override the Object toString() method, and replace it with our code:
public String toString()
{
    String stars = "";
    for(int x = 0; x < count; x++)
    {
        stars += "*";
    }
            // Create the stars string, and append it to the name and count.
    return name + ":" + count + " | " + stars;
}
}

このコードにアクセスすることは、ソリューションよりもはるかに簡単です。まず、すべての値を格納するArrayListようなものを作成し、それをパラメータ化して type にします。barChartBar

  ArrayList<Bar> barChart = new ArrayList<Bar>();

次に、いくつかのテストケースを次の場所に追加できます。

  barChart.add(new Bar("Red", 10));
  barChart.add(new Bar("Blue", 20));
  barChart.add(new Bar("Green", 12));

メソッドをオーバーライドしたので、オブジェクトを関数toStringに渡すだけです。System.out.println()何かのようなもの:

  for(Bar b : barChart) { 
     System.out.println(b);  
  }

出力

赤:10 | *********
ブルー:20 | ********************
緑:12 | ************

于 2013-04-18T09:45:02.843 に答える