簡體   English   中英

將元素從數組復制到數組列表,但如果先前已輸入某些元素,則跳過元素

[英]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));
    }

謝謝。

從長遠來看,面向對象的方法將為您提供更好的服務。 在嘗試模擬可能的解決方案之前,我想指出以下幾點:

  1. 原始數組arr包含字符串實際上只是一個大數組。 它看起來像是按行排列的結構,但實際上實際上沒有任何結構。 這質疑了為什么要使用數組從文件中獲取數據。

我認為,代表整個系統的一個或多個模型類會更好。 舉個例子,您可以有一個這樣的類:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM