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