当前位置: 首页 > 知识库问答 >
问题:

消息不断重复通过数组的每个元素Java

麻鹏鹍
2023-03-14

我是Java的新手,我有一个乘客构造函数类的对象数组。如果正在创建乘客对象,并且插入的出生日期不是我在下面指定的正确格式,我将尝试显示错误消息。问题是当我只有一个出生日期没有正确格式化时,错误消息会在整个数组中不断重复。

这是我的主要课程:

public class IPOO_P2 {

    private static Passenger[] passengers = new Passenger[10];

    public static void main(String[] args) {

        SubwayManager man1 = new SubwayManager(passengers);

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

            passengers[i] = new Passenger("nomee", "12", "2011-10-02");
            passengers[i] = new Passenger("nomee2", "1", "1957-10-02");
            passengers[i] = new Passenger("nomee2", "0", "19-101-02");
            passengers[i] = man1.createPassenger("name", "3", "1997-10-02");
            passengers[i] = man1.createPassenger("name", "3", "1997-10-02");
        }
    }
}

乘客级别:

public class Passenger {

    private String name;
    private String nif;
    private String birthDate;
    private Trip[] tripsLog;
    private boolean student;

    public Passenger(String name, String nif, String birthDate) {
        if (name != null || name != "") {

           if(isDateValid(birthDate)) {
               
                this.name = name;
                this.nif = nif;
                this.birthDate = birthDate;
                this.student = false;
                this.tripsLog = new Trip[10];
                
            } 
           else{ 
               System.out.println("Birth Date formatt should be: yyyy-MM-dd");
           }
        }
    }

    public boolean isDateValid(String bDate) {

        if(bDate != null){
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");

        try {
            LocalDate.parse(bDate, formatter);
            return true;
        } catch (DateTimeParseException e) {

            return false;
        }
    }return false;
    }

共有3个答案

魏安宁
2023-03-14

在该区块中:

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

            passengers[i] = new Passenger("nomee", "12", "2011-10-02");
            passengers[i] = new Passenger("nomee2", "1", "1957-10-02");
            passengers[i] = new Passenger("nomee2", "0", "19-101-02");
            passengers[i] = man1.createPassenger("name", "3", "1997-10-02");
            passengers[i] = man1.createPassenger("name", "3", "1997-10-02");
        }

您正在运行每个循环步骤的所有行。我的意思是,如果数组有10个元素,并且在循环中,所有元素都是paserngers[I]5次。您正在运行10*5=50个数组分配。

每个乘客[i](但第一个)都超越了前一个。

对于instace,在第一次迭代中,i=0。所以你跑:

            passengers[0] = new Passenger("nomee", "12", "2011-10-02");
            passengers[0] = new Passenger("nomee2", "1", "1957-10-02");
            passengers[0] = new Passenger("nomee2", "0", "19-101-02");
            passengers[0] = man1.createPassenger("name", "3", "1997-10-02");
            passengers[0] = man1.createPassenger("name", "3", "1997-10-02");

在第二次迭代中:

            passengers[1] = new Passenger("nomee", "12", "2011-10-02");
            passengers[1] = new Passenger("nomee2", "1", "1957-10-02");
            passengers[1] = new Passenger("nomee2", "0", "19-101-02");
            passengers[1] = man1.createPassenger("name", "3", "1997-10-02");
            passengers[1] = man1.createPassenger("name", "3", "1997-10-02");

像这样,10次。在其中的一个迭代中,你用错误的日期调用构造函数(除了其他4个用正确的日期)。

靳举
2023-03-14

不知道你在这里想做什么

passengers[i] = new Passenger("nomee", "12", "2011-10-02");
passengers[i] = new Passenger("nomee2", "1", "1957-10-02");
passengers[i] = new Passenger("nomee2", "0", "19-101-02");
passengers[i] = man1.createPassenger("name", "3", "1997-10-02");
passengers[i] = man1.createPassenger("name", "3", "1997-10-02");

您正在覆盖乘客数组中的第i个元素,每个循环4次。

这个赋值给出了一个DateTimeParseExc0019,因此每次迭代都会打印相同的赋值:

passengers[i] = new Passenger("nomee2", "0", "19-101-02");
陆烨烁
2023-03-14

问题是For循环重复执行构造Passenger对象的代码10次。因此,如果Passenger构造函数中有一个错误日期,您将看到相同的错误消息显示10次。

从创建Passenger对象的代码中删除For loop,然后单独创建Passenger对象,如下所示:

            passengers[0] = new Passenger("nomee", "12", "2011-10-02");
            passengers[1] = new Passenger("nomee2", "1", "1957-10-02");
            passengers[2] = new Passenger("nomee2", "0", "19-101-02");
            passengers[3] = man1.createPassenger("name", "3", "1997-10-02");
            passengers[4] = man1.createPassenger("name", "3", "1997-10-02");

这样,对于提供给乘客的每个错误日期,您只会看到一次错误消息

 类似资料:
  • 如何在Java中复制数组的元素,并按原始数组的相同顺序将它们添加到新数组中 请解释为什么上面的代码不起作用。 我的输出是 : // [4, 4, 代替:

  • 假设我有两个数组,和,其中是的子集: 我想返回如下数组: 如果只是一个数字,那就足够简单了(),但我尝试了y中的等效

  • 问题内容: 这是我要使用的。.length方法对我尝试的任何操作均无效,因此我什至不知道从哪里开始。 问题答案: 您正在尝试遍历单个数组而不是字符串数组。更改 至 以便通过字符串列表循环,收集每个字符串和存储它诠释的,你以后。

  • 在我的应用程序中,我希望使用此库来显示项。 服务器中的ArrayList: 我为显示项编写了以下代码:

  • 问题内容: 假设和。我正在寻找最好的方法来重复精确的时间,然后以的形式放置一个扁平数组。 我想尽可能快地执行此操作,因为我必须执行多次。我正在使用Python和numpy,并且数组定义为numpy.ndarray。我周围中搜索和了解,并能很好地被用来重复每个元素次,但我想每个人重复不同的时间。 一种方法是: 我想知道是否有更好的方法。 问题答案: 这就是它的作用: 在纯Python中,您可以执行以

  • 我被分配了一项编程任务,但我被卡住了。其说明如下: 有一个名为“秘密圣诞老人”(给他们礼物)的游戏,有很多孩子参加。对于每个参与的孩子,都有一个来自参与孩子的秘密圣诞朋友。我必须编写一个程序,为每个参与的孩子挑选一个秘密的圣诞老人朋友。 示例:如果Bob,Alice,John和George是参与的孩子,在随机选择之后, 输出可能看起来像 具有相同输入的连续两次程序运行不应有相同的结果。 我的想法是