如何在Java中操作2D数组数据
我有一个清单,列出了个人在一周内完成任务的开始和停止时间
当他们更改任务时,会生成一个新条目
此信息存储在2D数组中。-我想循环这个数组,并将数据存储在另一个数组中
在新的2D数组中,我希望一行显示特定日期的人
因此,如果第一个数组存储:(Person、Day、In、Out、Total)
{{"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"}};
我希望第二个数组存储:
{{"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
# 1 楼答案
感谢您的帮助,但我设法找到了一个解决方案,解决了在开始数组中循环时出现的问题
这给了我想要的输出。不过,谢谢你关于制作员工对象的建议,我以后会用它
启动阵列
约翰周一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
空值
空空空空空空
# 2 楼答案
我建议你使用一个object Employee来完成一个会话集合。 对象会话:
以及目标员工:
但实施员工行为仍有一个问题。在我下面的例子中,如果Mike出现中断,会发生什么情况:
# 3 楼答案
1)你可以为Employee创建一个类,但我的答案将涉及你选择2D数组的风格
2)不应该为完成的数组分配5乘5的数组。当然,列的数量可能是5,但是如果您的示例中有重复的列呢
为了解决第二个问题,我将使用
for
循环和一个计数器变量来迭代每个人的标识变量。在这种情况下,我假设每个“名字”都不同,所以你可以检查名字和日期是否相同,如果是,不要增加计数器。最后,你有一个完美大小的2D阵列下一步,创建一个算法来计算给定进出时间的工作小时数
最后,使用另一个
for
循环,检查名称和日期是否相同。如果是这样,把这些小时加起来,用这些数据创建一个新行