为什么这个循环打印底线3次?

时间:2017-04-28 07:36:46

标签: java for-loop

void someMethod(E e) {
  e.a();  // OK.
  e.b();  // OK.
  // e.c();  // Compiler error, E doesn't implement C.
}

现在,这是主要的...... ....

    import java.util.ArrayList;
    import java.util.Collections;

    public class AmusementPark {
    private ArrayList<Ticket> tickets;
    private ArrayList<Merchandise> merchandise;
    private String name;
    AmusementPark(String name){
        this.name=name;
        this.tickets = new ArrayList<Ticket>();
        this.merchandise= new ArrayList<Merchandise>();
    }
    void addTicket(long num, String cat, String h, String dt, double pr, boolean pch){
        Ticket test = new Ticket(num, cat, h, dt, pr, pch);
        tickets.add(test);
    }

    String getName(){
        return name;



    }
    public ArrayList<String> getTicketDates(){
           ArrayList<String> theDateArray= new ArrayList<>();
           int i;

           for (i=0; i <tickets.size(); i++){
               if(tickets .get(i).getPurchased()== false){
                 theDateArray.add(tickets.get(i).getDate());
               }
             }
             for(int f=0; f<theDateArray.size();f++){
               System.out.println(theDateArray.get(f)+ " ");
             }
             return theDateArray;
           }       



     public int getTickets(String date){
         int tix= getTicketDates().indexOf(date);
         int occurances= Collections.frequency(getTicketDates(), tix);
         if (tix>=0){
             System.out.println(occurances);


         }
         return occurances;
     }
    }

如果我向门票ArrayList添加和项目,然后我打印出方法getDate,它会打印出3次日期。我尝试了一切,包括取出print语句并将其放在下一个}之外。当我休息时,它给了我一个死代码错误。

这个循环基本上做的是获取另一个名为ticket的列表,当getDate方法的布尔值为false时,它会以String的形式将日期添加到下一个ArrayList。每张票的日期打印3次。

更新

我添加了整个类以及主类。

getTickets方法是搜索日期的地方,并且ArrayList中满足该日期的票证数量将作为整数返回。

一旦我在主类上调用该方法,它会重复3次日期,并且它仍然不会在下一个方法中返回正确的整数。

3 个答案:

答案 0 :(得分:2)

通常情况下,良好的缩进使问题更加清晰。

由于System.out.println的循环位于另一个循环内,因此您会多次打印theDateArray的内容。

假设tickets中的所有故障单都没有购买,您每次都会向theDateArray添加一个新元素;这样:

  1. 在第一次迭代中,您打印1个元素
  2. 在第二次迭代中,您打印1 + 1个元素
  3. 在第三次迭代中,您打印1 + 1 + 1个元素 ...
  4. 将此循环移到另一个循环之外:

    for (i=0; i <tickets.size(); i++){
      if(tickets .get(i).getPurchased()== false){
        theDateArray.add(tickets.get(i).getDate());
      }
    }
    for(int f=0; f<theDateArray.size();f++){
      System.out.println(theDateArray.get(f)+ " ");
    }
    

    另外,请注意增强的for循环使这更加清晰:

    for (Ticket t : tickets) {
      if (!t.getPurchased()) {
        theDateArray.add(t.getDate());
      }
    }
    for (String date : theDateArray) {
      System.out.println(date + " ");
    }
    

答案 1 :(得分:1)

你在第二个循环中使用了错误的int,而不是int我应该使用int f。就像评论中提到的其他人一样,你需要多个括号,在返回之前删除一个if和另一个,它应该没问题。试试这段代码:

public ArrayList<String> getTicketDates(){
   ArrayList<String> theDateArray= new ArrayList<>();
   int i;

   for (i=0; i<tickets.size(); i++){
      if(tickets.get(i).getPurchased()== false)
         theDateArray.add(tickets.get(i).getDate());
   }

   for(int f=0; f<theDateArray.size();f++){
      System.out.println(theDateArray.get(f)+ " ");
   }       

   return theDateArray;
}

答案 2 :(得分:0)

for (i=0; i<tickets.size(); i++){
            if(tickets.get(i).getPurchased()== false);{
                theDateArray.add(tickets.get(i).getDate());
            }
            for(int f=0; f<theDateArray.size();f++){
                System.out.println(theDateArray.get(i)+ " ");

            }

        }return theDateArray;

在for循环中if(tickets.get(i).getPurchased()== false);之后有一个分号,这使得它成为无体,如果,并且后面的代码块将始终执行。可能是您的输入数据数据是循环运行3次,因此输出