![](/img/trans.png)
[英]Copy some elements from an array of double to an array list of double
[英]Copy elements from an array to an array list but skip element if some elements have been previously entered
我試圖遍歷下面的數組,然后使用下面的格式將元素從其中添加到數組列表中。
這是數組:
String[] arr = {
"room1", "10.11.2017", "17:00-18:00", "meeting event",
"room2", "12.11.2017", "19:00-20:00", "meeting event",
"room3", "20.11.2017", "20:00:21:00", "meeting event",
"room1", "10.11.2017", "18:00-19:00", "meeting event",
"room1", "15.11.2017", "10:00-11:00", "meeting event",
"room2", "12.11.2017", "21:00-22:00", "meeting event",
"room2", "12.11.2017", "22:00-23:00", "meeting event",
"room3", "20.11.2017", "21:00:22:00", "meeting event",
"room1", "10.11.2017", "19:00-20:00", "meeting event",
"room4", "30.11.2017", "09:00-10:00", "meeting event"
};
我想獲得一個包含以下字符串元素的新數組列表:
room1 , 10.11.2017 , 17:00-18:00 , 18:00-19:00 , 19:00-20:00 , meeting event
room2 , 12.11.2017 , 19:00-20:00 , 21:00-22:00 , 22:00-23:00 , meeting event
room3 , 20.11.2017 , 20:00:21:00 , 21:00:22:00 , meeting event
room1 , 15.11.2017 , 10:00-11:00 , meeting event
room4 , 30.11.2017 , 09:00-10:00 , meeting event
但是我得到了:
room1 , 10.11.2017 , 17:00-18:00 , 18:00-19:00 , 19:00-20:00 , meeting event
room2 , 12.11.2017 , 19:00-20:00 , 21:00-22:00 , 22:00-23:00 , meeting event
room3 , 20.11.2017 , 20:00:21:00 , 21:00:22:00 , meeting event
room1 , 10.11.2017 , 18:00-19:00 , 19:00-20:00 , meeting event
room1 , 15.11.2017 , 10:00-11:00 , meeting event
room2 , 12.11.2017 , 21:00-22:00 , 22:00-23:00 , meeting event
room2 , 12.11.2017 , 22:00-23:00 , meeting event
room3 , 20.11.2017 , 21:00:22:00 , meeting event
room1 , 10.11.2017 , 19:00-20:00 , meeting event
room4 , 30.11.2017 , 09:00-10:00 , meeting event
有沒有辦法更改下面的代碼,以便獲得所需的結果?
ArrayList<String> arr2 = new ArrayList<String>();
String roomNumber= new String();
String bookedDate = new String();
String bookedTime = new String();
String event = new String();
for (int i = 0; i < arr.length; i+=4) {
roomNumber = arr[i];
bookedDate = arr[i+1];
bookedTime = arr[i+2];
event = arr[i+3];
for (int j = i + 4; j < arr.length; j+=4) {
if (arr[i].equals(arr[j]) && arr[i+1].equals(arr[j+1]) && !arr[i+2].equals(arr[j+2])){
bookedTime = bookedTime + " , " + arr[j+2];
}
}
arr2.add(roomNumber + " , " + bookedDate + " , " + bookedTime + " , " + event);
}
for (int k = 0; k <arr2.size(); k++) {
System.out.println(arr2.get(k));
}
謝謝。
從長遠來看,面向對象的方法將為您提供更好的服務。 在嘗試模擬可能的解決方案之前,我想指出以下幾點:
我認為,代表整個系統的一個或多個模型類會更好。 舉個例子,您可以有一個這樣的類:
public class HotelRoom {
private String roomId;
private String roomType;
}
public class Booking {
private HotelRoom room;
private String purpose;
private Date bookingDate;
}
這些模型並不完整,但是它們描繪了我的意思。 因此,預訂信息可能就是文件中包含的信息,因此您可以在從文件中讀取時創建模型,創建這些對象,然后將其放入數組列表中。 這種結構會有所幫助。 您可以在需要澄清的地方提出問題。 請享用
如https://stackoverflow.com/users/2369963/adamson-jeremiah所述,解決此問題的最佳方法是使用類和對象。 但是,如果您要修改現有代碼,則問題在於您正在嘗試比較已檢查的記錄。 我們可以使用布爾數組不比較已比較的記錄。 在這種情況下,一條記錄是4個數組元素的組合。
import java.util.*;
class Main {
public static void main(String[] args) {
String[] arr = {
"room1", "10.11.2017", "17:00-18:00", "meeting event",
"room2", "12.11.2017", "19:00-20:00", "meeting event",
"room3", "20.11.2017", "20:00:21:00", "meeting event",
"room1", "10.11.2017", "18:00-19:00", "meeting event",
"room1", "15.11.2017", "10:00-11:00", "meeting event",
"room2", "12.11.2017", "21:00-22:00", "meeting event",
"room2", "12.11.2017", "22:00-23:00", "meeting event",
"room3", "20.11.2017", "21:00:22:00", "meeting event",
"room1", "10.11.2017", "19:00-20:00", "meeting event",
"room4", "30.11.2017", "09:00-10:00", "meeting event"
};
ArrayList<String> arr2 = new ArrayList<String>();
String roomNumber= new String();
String bookedDate = new String();
String bookedTime = new String();
String event = new String();
// array to check if record is already checked.
boolean[] alreadyChecked = new boolean[arr.length/4];
for (int i = 0; i < arr.length; i+=4) {
roomNumber = arr[i];
bookedDate = arr[i+1];
bookedTime = arr[i+2];
event = arr[i+3];
// If record is already checked, continue
if(alreadyChecked[i/4] == true)
continue;
for (int j = i + 4; j < arr.length; j+=4) {
if (arr[i].equals(arr[j]) && arr[i+1].equals(arr[j+1]) && !arr[i+2].equals(arr[j+2]) && alreadyChecked[j/4] == false){
bookedTime = bookedTime + " , " + arr[j+2];
// Mark the record as checked
alreadyChecked[j/4] = true;
}
}
arr2.add(roomNumber + " , " + bookedDate + " , " + bookedTime + " , " + event);
// mark the record as checked
alreadyChecked[i/4] = true;
}
for (int k = 0; k <arr2.size(); k++) {
System.out.println(arr2.get(k));
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.