条形图不按照我想要的方式运行

时间:2013-04-18 09:30:21

标签: java

我希望你能帮我解决这个问题。我试图创建一个条形图,但它似乎并不是我的。我试图在下面输出,但是当我运行它时,我得到[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 = {&#34; Red,&#34; Yellow&#34;,&#34; Blue&#34;};但是没有初始化或声明它,但如果有意义的话,创建一种让程序自己创建的方法。

1 个答案:

答案 0 :(得分:0)

您直接打印uniqueTeamsuniqueTeams的类型为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,类似barChart来存储所有值,然后我们将其参数化为Bar类型:

  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 | ************