计算ArrayList中String的出现次数

时间:2013-11-03 00:42:05

标签: java arraylist variable-assignment

我正在使用ArrayList来保存节目的名称,日期和时间。我的节目要求我输出一周中每天播放的节目数量。我已经输入了4个不同的节目,其中两个是在同一天。到目前为止,输出给我的唯一一件事就是“周四有2个节目。”另外两个没有表现出来。我如何才能显示我输入的每一天的节目数量?这是我的代码:

    String showDay = ((showInfo)show.get(0)).day.toString();
    int totalShows = 0;

    //print occurences for how many shows play each day
    for (int i = 0; i < show.size(); i++) {
           if (showDay.equals(((showInfo)show.get(i)).day.toString())) {
                totalShows++;
           }
      }

      System.out.println("On " + showDay + " there are/is " + totalShows + " show(s).");
 }

这是我输入的节目的代码:

//input information
    do{
        showInfo temp = new showInfo();

        System.out.print("Enter the name of show: ");
        String showName = br.readLine();
        temp.name = showName;

        System.out.print("Enter which day of the week a new episode premieres: ");
        String showDay = br.readLine();
        temp.day = showDay;

        System.out.print("Enter time in 24-hour format (e.g. 2100, 1900): ");
        int showTime = Integer.valueOf(br.readLine()).intValue();
        temp.time = showTime;

        show.add(temp);            

        System.out.print("Would you like to add another show? (y/n) ");
    }
    while((br.readLine().compareTo("n")) != 0);

请记住我正在使用Java 1.4。别无选择。按老师的要求。

这可能是显而易见的,但我现在没有注意到。任何帮助都会很棒!提前谢谢!

修改

String showDay = ((showInfo)show.get(0)).day.toString();

    if("sunday".equalsIgnoreCase(showDay)){
        showdayCount[0]++;
        System.out.println("There are/is " + showdayCount[0]++ + " show on Sunday.");
    }else if("monday".equalsIgnoreCase(showDay)){
        showdayCount[1]++;
        System.out.println("There are/is " + showdayCount[1]++ + " show on Monday.");
    }else if("tuesday".equalsIgnoreCase(showDay)){
        showdayCount[2]++;
        System.out.println("There are/is " + showdayCount[2]++ + " show on Tuesday.");
    }else if("wednesday".equalsIgnoreCase(showDay)){
        showdayCount[3]++;
        System.out.println("There are/is " + showdayCount[3]++ + " show on Wednesday.");        
    }else if("thursday".equalsIgnoreCase(showDay)){
        showdayCount[4]++;
        System.out.println("There are/is " + showdayCount[4]++ + " show on Thursday.");
    }else if("friday".equalsIgnoreCase(showDay)){
        showdayCount[5]++;
        System.out.println("There are/is " + showdayCount[5]++ + " show on Friday.");
    }else if("saturday".equalsIgnoreCase(showDay)){
        showdayCount[6]++;
        System.out.println("There are/is " + showdayCount[6]++ + " show on Saturday.");
    }

这也只给了我一行。我究竟做错了什么?! :(

修改

我想要的是输入电视节目的名称/日期/时间,然后能够显示该特定日期的节目数量!

例如,大爆炸理论和社区都在周四。所以代码会输出像

这样的东西
There are 2 shows on Thursday.

到目前为止,没有任何效果。

2 个答案:

答案 0 :(得分:0)

你只能从这一行获得一天:

String showDay = ((showInfo)show.get(0)).day.toString(); 

这是我的黑客解决方案(可能有一些错误,比如错误的变量,但你应该能够解决它):

 //Create a map that maps days to the shows that are on that day
 LinkedHashMap showDays=new LinkedHashMap(); //String to Set map
 String[] days={"Sunday","Monday", ....};//put the rest of the days in here
 for(int dayIndex=0;dayIndex<days.length;dayIndex++){
     String day=days[dayIndex];
     showDays.put(day,new HashSet());
 }

 //iterate through the shows and put them in their respective days in the map
 for (int i = 0; i < show.size(); i++) {
     String dayForShow=((showInfo)show.get(i)).day.toString();
     showDays.get(dayForShow).put(show.get(i));
 }

 //now print out how many shows are on each day
 for(int dayIndex=0;dayIndex<days.length;dayIndex++){
     String day=days[dayIndex];
     int showsToday=showDays.get(day).size();
    ///do your print out now
 }

你可以让'LinkedHashMap showDays'成为一个类变量,并在每次添加到show时添加它(并在每次从show中删除时添加它)。

PS。告诉你的老师它不再是2002年,技术继续发展,他们让我的工作更加努力。

答案 1 :(得分:0)

创建Show

public class Show {
    String showName;
    String showDay;
    int showTime;
    static int[] showdayCount = new int[7];

    public Show(String showName, String, showDay, iny showTime){
        this.showName = showName;
        this.showDay = showDay;
        this.showTime = showTime;

        // increment showDayCOunt[] according to showDay from 
        switch(showDay){
            case "Sunday": showDayCount[0]++; break;
            case "Monday": showDayCount[1]++; break;
            case "Tuesday": showDayCount[2]++; break;
            case "Wednesday": showDayCount[3]++; break;
            case "Thursday": showDayCount[4]++; break;
            case "Friday": showDayCount[5]++; break;
            case "Saturday": showDayCount[6]++; break;

        }

    }
}

这是YourClass的主要方法

public static void main(String[] args){
    // Create Array of Shows
    Show[] shosList = new Show[4]; // or how many ever shows you have

    // Get your inputs for showName, showDay, showTime
    Sting showName = 
    String showDay = 
    int showTime = 


    // Create show Object
    Show show = new Show(showName, showDate, showTime);

    // add show to ArrayList
    showList[someIndex] = show;

    // Do all other stuff then print
    // when you print, you can get the showDayCount directly from the Show class

}

现在我不想为你做任何事情。我只想让你朝着正确的方向前进。请注意,如果您希望上述内容多次发生,请考虑放入循环内部。

编辑:使用getShowdayCount

将此添加到我上面的Show class

public int getShowdayCount(String showday){
    switch(showDay){
        case "Sunday": return showDayCount[0]; break;
        case "Monday": return showDayCount[1]; break;
        case "Tuesday": return showDayCount[2]++; break;
        case "Wednesday": return showDayCount[3]++; break;
        case "Thursday": return showDayCount[4]++; break;
        case "Friday": return showDayCount[5]++; break;
        case "Saturday": return showDayCount[6]++; break;

    }
}

修改:使用if/else if语句中的示例switch

// for main method inputs
if ("sunday"equalsIgnoreCase(showDay){
    showdayCount[0]++
} else ("monday".equalsIgnoreCase(showDay){
    showdayCount[1]++
} // finish if/else if statement


// for getShowdayCount method
if ("sunday"equalsIgnoreCase(showDay){
    return showdayCount[0];
} else ("monday".equalsIgnoreCase(showDay){
    return showdayCount[1];
} // finish if/else if statement

您可以从main类这样的

中调用它
show.getShowdayCount(show.showday);

编辑:实际上,只需使用main方法将上述编辑内容放入您的课程

YourClassWithMainMethod{

    static int[] showdayCount = new int[7];        

    public static void mina(String[] args){

        // call getShowdayCount here
        getShowdayCount(String showday);
    }

    public static int getShowdayCount(String showday){

    }
}

编辑:您想要什么以及您不想要什么

如果声明

,你不需要这个
 System.out.println("There are/is " + showdayCount[5]++ + " show on Friday.");

如果要打印所有节目:

for (int i = 0; i < showdayCount.length; i++){
    int showday;

    if (i == 0){
       showday = "Sunday
       finish the if/else if statements
    }
    System.out.println("There is " + showDayCount[i] + " shows on " + showday);

}