如何在Java中操作2D数组数据

如何在Java中操作2D数组数据,java,arrays,multidimensional-array,Java,Arrays,Multidimensional Array,我有一个清单,列出了个人在一周内完成任务的开始和停止时间 当他们更改任务时,会创建一个新条目 此信息存储在2D数组中。-我想循环这个数组并将数据存储在另一个数组中 在新的2D数组中,我希望有一行显示特定日期的人 因此,如果第一个数组存储:(Person、Day、In、Out、Total) 我希望第二个数组存储: {{"John","Mon","08:00","17:00","9.00"}, {"John","Tue","08:00","17:00","9.00"},

我有一个清单,列出了个人在一周内完成任务的开始和停止时间

当他们更改任务时,会创建一个新条目

此信息存储在2D数组中。-我想循环这个数组并将数据存储在另一个数组中

在新的2D数组中,我希望有一行显示特定日期的人

因此,如果第一个数组存储:(Person、Day、In、Out、Total)

我希望第二个数组存储:

    {{"John","Mon","08:00","17:00","9.00"},
     {"John","Tue","08:00","17:00","9.00"},
     {"Mike","Tue","08:00","17:00","9.00"}};
以下是我目前的代码:

 public class CompArrayTest {

public static void main(String args[]){

    String[][] End = new String [5][5];
    String[][] Start = {{"John","Mon","08:00","12:00","4.00"},
                        {"John","Mon","12:00","17:00","5.00"},
                        {"John","Tue","08:00","17:00","9.00"},
                        {"Mike","Tue","08:00","11:00","3.00"},
                        {"Mike","Tue","11:00","17:00","6.00"}};



    //print start 
    for(int i = 0; i<Start.length; i++){ 
      for(int j = 0; j<Start.length; j++){
          System.out.print(Start[i][j]+" ");

      }//j end
     System.out.print("\n");
    }//i end

    //change end 
    for(int i = 0; i<Start.length; i++){ 
        String name = Start[i][0];
        String day = Start[i][1];
        String In = Start[i][2];
        String Out = Start[i][3];
        String Total = Start[i][4];

       //look through End
      for(int j = 0; j<5; j++){

      String eN= End[j][0];
      String eD= End[j][1];

      if(eN==name && eD==day){
      //change end time
      End[j][3]=Start[i][3];

      //parse and add times
      double TS = Double.parseDouble(Start[i][4]);
      double TE = Double.parseDouble(End[i][4]);

      double ans = TS + TE;
      String ANS = ans+"";

      End[j][4]= ANS;


      } else {



      End[j][0] = name;
      End[j][1] = day;
      End[j][2] = In;
      End[j][3] = Out;
      End[j][4] = Total;


      }//else end


      }//j end
     System.out.print("\n");
    }//i end

 //print end 
    for(int i = 0; i<Start.length; i++){ 
      for(int j = 0; j<Start.length; j++){
          System.out.print(End[i][j]+" ");

      }//j end 
     System.out.print("\n");
    }//i end

}//main end
公共类比较测试{
公共静态void main(字符串参数[]){
字符串[][]结束=新字符串[5][5];
字符串[][]开始={{“John”,“Mon”,“08:00”,“12:00”,“4.00”},
{“约翰”、“星期一”、“12:00”、“17:00”、“5.00”},
{“约翰”,“星期二”,“08:00”,“17:00”,“9.00”},
{“迈克”,“星期二”,“08:00”,“11:00”,“3.00”},
{“迈克”、“星期二”、“11:00”、“17:00”、“6.00”};
//打印开始
对于(inti=0;i1),您可以为Employee创建一个类,但我的答案将涉及您选择2D数组的风格

2) 您不应该为完成的数组分配一个5乘5的数组。当然,列的数量可以是5,但是如果您有重复的,如示例中所示,该怎么办

为了解决第二个问题,我将使用一个
for
循环和一个计数器变量来迭代每个人的标识变量是不同的,因此您可以检查名称和日期是否相同,如果相同,则不要增加计数器。最后,您将得到一个大小完美的2D数组

接下来,创建一个算法来计算给定进出时间的工作小时数


最后,对
循环使用另一个
,检查名称和日期是否相同。如果相同,则将这些小时数相加,并用这些数据创建一个新行。

我建议您使用对象Employee来创建会话集合。 对象会话:

public class Session {
    private String day;
    private String in;
    private String out;
    private String total;

    Session(String day, String in, String out, String total){
        this.setDay(day);
        this.setIn(in);
        this.setOut(out);
        this.setTotal(total);
}
    public String getDay() {
        return day;
    }
    public void setDay(String day) {
        this.day = day;
    }
    public String getIn() {
        return in;
    }
    public void setIn(String in) {
        this.in = in;
    }
    public String getOut() {
        return out;
    }
    public void setOut(String out) {
        this.out = out;
    }
    public String getTotal() {
        return total;
    }
    public void setTotal(String total) {
        this.total = total;
    }   
}
以及目标员工:

public class Employee {
    private String name;
    private List<Session> sessions;

    Employee(String name){
        this.name = name;
        this.sessions = new ArrayList<Session>();
    }

    public boolean addSession(String day, String in, String out, String total){
        return sessions.add(new Session(day, in, out, total));
    }
}

感谢您的帮助,但我找到了一个解决方案,解决了在开始数组中循环时出现的问题

 for (int i = 0; i < Start.length; i++) {
        String name = Start[i][0];
        String day = Start[i][1];
        String In = Start[i][2];
        String Out = Start[i][3];
        String Total = Start[i][4];

        int emptyLine = 0;
        int lastLine = 0;

        //gets first emptyline, lastfilled line
        for (int j = 0; j < 5; j++) {

            if (End[j][0] == null) {
                emptyLine = j;
                if (j > 0) {
                    lastLine = j - 1;

                }
                break;
            }
        }//get Empty

        String eN = End[lastLine][0];
        String eD = End[lastLine][1];

        if (eN == name && eD == day) {
            //change end time
            End[lastLine][3] = Start[i][3];

            //parse and add times
            double TS = Double.parseDouble(Start[i][4]);
            double TE = Double.parseDouble(End[lastLine][4]);

            double ans = TS + TE;
            String ANS = ans + "";

            End[lastLine][4] = ANS;

           // System.out.println("Test If " + name + " " + day + " " + In + " " + Out + " " + Total);

        } else {

            End[emptyLine][0] = name;
            End[emptyLine][1] = day;
            End[emptyLine][2] = In;
            End[emptyLine][3] = Out;
            End[emptyLine][4] = Total;

           // System.out.println("Test Else " + name + " " + day + " " + In + " " + Out + " " + Total);

        }//else end


    }//i end
for(int i=0;i0){
lastLine=j-1;
}
打破
}
}//变空
字符串eN=End[lastLine][0];
字符串eD=End[lastLine][1];
如果(eN==名称&&eD==天){
//更改结束时间
结束[lastLine][3]=开始[i][3];
//解析并添加时间
double TS=double.parseDouble(Start[i][4]);
double TE=double.parseDouble(End[lastLine][4]);
双ans=TS+TE;
字符串ANS=ANS+“”;
结束[最后一行][4]=ANS;
//System.out.println(“如果测试“+name+”“+day+”“+In+”“+out+”“+Total”);
}否则{
End[emptyLine][0]=名称;
结束[emptyLine][1]=天;
End[emptyLine][2]=In;
End[emptyLine][3]=Out;
End[emptyLine][4]=总计;
//System.out.println(“测试其他项”+“名称”+“日期”+“输入”+“输出”+“总计”);
}//另一端
}//我结束
这给了我想要的输出。不过谢谢你关于创建employee对象的建议,我以后会使用它

启动阵列

约翰周一08:00 12:00 4.0
约翰周一12:00 17:00 5.0
约翰星期二08:00 17:00 9.0
迈克星期二08:00 11:00 3.0
迈克星期二11:00 17:00 6.0

端阵列

约翰周一08:00 17:00 9.0
约翰星期二08:00 17:00 9.0
迈克星期二08:00 17:00 9.0
空值

空空

一种更简单的方法可能是为“雇员”创建一个类,比如说。让其成员变量为姓名、入/出时间和工作小时感谢帮助,我找到了一个适合我的解决方案。感谢帮助,我找到了一个适合我的解决方案。
{{"John","Mon","08:00","12:00","4.00"},
 {"John","Mon","12:00","17:00","5.00"},
 {"John","Tue","08:00","17:00","9.00"},
 {"Mike","Tue","08:00","11:00","3.00"}
 {"Mike","Tue","12:00","17:00","6.00"}
};
 for (int i = 0; i < Start.length; i++) {
        String name = Start[i][0];
        String day = Start[i][1];
        String In = Start[i][2];
        String Out = Start[i][3];
        String Total = Start[i][4];

        int emptyLine = 0;
        int lastLine = 0;

        //gets first emptyline, lastfilled line
        for (int j = 0; j < 5; j++) {

            if (End[j][0] == null) {
                emptyLine = j;
                if (j > 0) {
                    lastLine = j - 1;

                }
                break;
            }
        }//get Empty

        String eN = End[lastLine][0];
        String eD = End[lastLine][1];

        if (eN == name && eD == day) {
            //change end time
            End[lastLine][3] = Start[i][3];

            //parse and add times
            double TS = Double.parseDouble(Start[i][4]);
            double TE = Double.parseDouble(End[lastLine][4]);

            double ans = TS + TE;
            String ANS = ans + "";

            End[lastLine][4] = ANS;

           // System.out.println("Test If " + name + " " + day + " " + In + " " + Out + " " + Total);

        } else {

            End[emptyLine][0] = name;
            End[emptyLine][1] = day;
            End[emptyLine][2] = In;
            End[emptyLine][3] = Out;
            End[emptyLine][4] = Total;

           // System.out.println("Test Else " + name + " " + day + " " + In + " " + Out + " " + Total);

        }//else end


    }//i end