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

Java 为什么这个循环会将底线打印3次?,java,for-loop,Java,For Loop,如果我将and项添加到tickets数组列表,然后打印出getDate方法,它会打印出日期3次。我尝试了所有的方法,包括把打印出来的语句拿出来,放在第二天之外。当我中断时,它会给我一个死代码错误 这个循环的基本功能是获取另一个名为tickets的列表,当getDate方法的布尔值为false时,它将以字符串形式将日期添加到下一个ArrayList中。但每张票的日期打印了3次 更新 我添加了整个类以及主类 getTickets方法是搜索日期的地方,ArrayList中满足该日期的票证数量作为整数返

如果我将and项添加到tickets数组列表,然后打印出getDate方法,它会打印出日期3次。我尝试了所有的方法,包括把打印出来的语句拿出来,放在第二天之外。当我中断时,它会给我一个死代码错误

这个循环的基本功能是获取另一个名为tickets的列表,当getDate方法的布尔值为false时,它将以字符串形式将日期添加到下一个ArrayList中。但每张票的日期打印了3次

更新

我添加了整个类以及主类

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


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

在第二个循环中使用了错误的int,应该使用int f而不是int i。像评论中提到的其他人一样,你必须在许多括号中删除一个接一个的if,在返回之前删除另一个,这样应该就可以了。请尝试以下代码:

public class AmusementParkTester {

public static void main(String[] args) {


    AmusementPark park1= new AmusementPark("Walden University Park");

    park1.addTicket(777, "Child", "Noah Johnson","2017-06-09" , 27.99, false);

    System.out.println("The dates in which tickets are available are as follows: ");
            park1.getTicketDates();

            park1.getTickets("2017-06-09");

    }



}
public ArrayList getTicketDates(){
ArrayList theDateArray=新的ArrayList();
int i;

对于(i=0;i您在第二个循环中使用了错误的int,而不是int i,您应该使用int f。与注释中提到的其他人一样,您必须使用多个括号,在if之后删除一个,在return之前删除另一个,这样应该可以。请尝试以下代码:

public class AmusementParkTester {

public static void main(String[] args) {


    AmusementPark park1= new AmusementPark("Walden University Park");

    park1.addTicket(777, "Child", "Noah Johnson","2017-06-09" , 27.99, false);

    System.out.println("The dates in which tickets are available are as follows: ");
            park1.getTicketDates();

            park1.getTickets("2017-06-09");

    }



}
public ArrayList getTicketDates(){
ArrayList theDateArray=新的ArrayList();
int i;

对于通常情况下的(i=0;i),良好的缩进使问题更清楚

由于带有
System.out.println
的循环位于另一个循环内,因此可以多次打印
DateArray
的内容

假设未购买
tickets
中的所有tickets,则每次向日期数组添加一个新元素;因此:

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

    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;
    }
    

    通常情况下,良好的压痕会使问题更清楚

    由于带有
    System.out.println
    的循环位于另一个循环内,因此可以多次打印
    DateArray
    的内容

    假设未购买
    tickets
    中的所有tickets,则每次向日期数组添加一个新元素;因此:

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

    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;
    }
    


    for(i=0;i
    for(i=0;i)使用增强的for循环,您的代码会更清晰。而
    tickets
    包含什么?
    if(tickets.get(i).getPurchased()==false);
    …分号在那里做什么?在if块之前有一个额外的
    。这改变了您的代码语义!将内部for循环从外部for循环中删除…使用增强的for循环,您的代码会更清晰。
    tickets
    包含什么?
    if(tickets.get(i).getPurchased()==false);
    …分号在那里做什么?在if块之前有一个额外的
    。这正在改变你的代码语义!从外部循环中删除内部for循环…这很好。我修复了它,但它仍在做同样的事情。请参阅更新*这很好。我修复了它,但它仍在做同样的事情。请参阅更新*我复制并粘贴了你的代码在我的上面。它仍然在做完全相同的事情。我想知道你的声明“如果我在tickets ArrayList中添加一个项目”,您确定票证arraylist实际上只有一项吗?也许可以添加代码,显示您创建arraylist的位置并将票证添加到itI中。它在arraylist中只有一项。它打印了3次日期。如您所见,更新*我在arraylist中只有一项。如果我不包括getTickets方法,则为ju很好。当我将该方法调用到Tester类中的main方法时,它会重复3次。我将您的代码复制并粘贴到我的代码上。它仍在执行完全相同的操作。我想知道您的声明“如果我在tickets ArrayList中添加一项”,您确定票证arraylist实际上只有一项吗?也许可以添加代码,显示您创建arraylist的位置并将票证添加到itI中。它在arraylist中只有一项。它打印了3次日期。如您所见,更新*我在arraylist中只有一项。如果我不包括getTickets方法,则为ju很好。当我调用这个方法到Tester类中的main方法时,它重复了3次。这是固定的。这是固定的。
    for (Ticket t : tickets) {
      if (!t.getPurchased()) {
        theDateArray.add(t.getDate());
      }
    }
    for (String date : theDateArray) {
      System.out.println(date + " ");
    }
    
    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;