2016-06-29 14 views
-2

1週間以上タスクを実行する個人の開始時間と終了時間のリストがあります。2次元配列データをJavaで操作する方法

タスクを変更すると、新しいエントリが作成されます。

この情報は2D配列に格納されています。 - 私はこの配列をループし、別の配列にデータを格納したいと思います。

新しい2D配列では、特定の日に人を表示する行が必要です。だから、

最初の配列に格納場合:(アウト人、日、中、合計)

{{"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

もっと簡単な方法は、おそらく "Employee"のクラスを作成することです。メンバ変数の名前、時間の出入り、時間は – ragingasiancoder

答えて

0

1)あなたは従業員のためのクラスを作成することもできますが、私の答えは、2次元配列を選択するあなたのスタイルに対処します。

2)完成した配列に5×5の配列を割り当てるべきではありません。あなたの例のような重複を持っているなら、列の数は5になるかもしれませんが、どうでしょうか?

第2の問題を解決するために、私はforループとカウンタ変数を使用して、各人物の識別変数を反復処理します。この場合、私はすべての "名前"が異なると仮定するつもりですので、名前と日が同じかどうかを確認するだけで、そうであればカウンタをインクリメントしないでください。結局のところ、あなたは完全な大きさの2D配列を持っています。

次に、時刻を指定して作業時間をカウントするアルゴリズムを作成します。

最後に別のforループを使用して、名前と曜日が同じかどうかを確認します。その場合は、その時間を追加し、そのデータで新しい行を作成します。

+0

助けてくれてありがとう、私は私のために働く解決策を考え出した。 –

0

Sessionのコレクションを集約するオブジェクト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)); 
    } 
} 

しかし、問題は、従業員の振る舞いを実装するために残っています。あなたの助けのための

{{"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"} 
}; 
+0

助けてくれてありがとう、私は私のために働く解決策を考え出した。 –

0

おかげで、私はスタートアレイをループするとき、私の問題を解決ソリューションを把握するために管理:何を以下の私のexempleにマイク用不連続の場合に起こります。

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 

これは私に望ましい出力を与えます。しかし、従業員のオブジェクトを作成するアドバイスをいただきありがとうございます。私は今後これを使用します。

スタートアレイ

ジョン月8時12時00分4。0
ジョン月12時17時5.0
ジョン・火曜午前8時17時9.0
マイク・火曜午前8時11時00分3.0
マイク・火曜11時00分17時6.0

エンド・アレイ

ジョン月8時00分午前17時00分9.0
ジョン・火曜午前8時00分午前17時00分9.0
マイク・火曜午前8時00分午前17時00分9.0
ヌルヌルヌルヌルヌル
null null null null null

関連する問題