簡體   English   中英

我需要一次接聽所有線路並與他們一起工作,但我得到了逐行接收

[英]I need to take all the lines at once and work with them, but I get line-by-line reception

當讀取行並使用它們繼續逐行

我需要先接受多行輸入,然后才能使用代碼

public class OrderRestaurant {
 
  public static void main(String[] args) throws IOException {
      
    InputStreamReader reader = new InputStreamReader(System.in, StandardCharsets.UTF_8);
    BufferedReader in = new BufferedReader(reader);
    String line = null;
    
    TreeMap<String, LinkedList<Integer>> orderMap = new TreeMap<String, LinkedList<Integer>>();
      Set<Integer> tableSet = new TreeSet<Integer>();
    
    while ((line = in.readLine()) != null) {
        String[] orders = line.split(",");
    
        for (int i = 0; i < orders.length; i++) {
            
            tableSet.add(Integer.parseInt(orders[1]));  
        }
            
            if (!(orderMap.containsKey(orders[2]))) {
                LinkedList<Integer> numbersTables = new LinkedList<>();
                numbersTables.add(Integer.parseInt(orders[1]));
            
                orderMap.put(orders[2], numbersTables);
            } else {
                orderMap.get(orders[2]).addLast(Integer.parseInt(orders[1]));
            }
         
        StringBuilder sBuilder = new StringBuilder("Table");
        
        Set<String>keysOrderMapSet=orderMap.keySet();
        for (String keyString : keysOrderMapSet) {
            sBuilder.append(',').append(keyString);
        }
        
         for(Integer key : tableSet){
             sBuilder.append("\n").append(key);
            
             for(Map.Entry<String, LinkedList<Integer>> entry : orderMap.entrySet())
             {
                 LinkedList<Integer> numbersOrder = entry.getValue();
                 int counterOrder = 0;
                 
                 for (int i = 0; i < numbersOrder.size(); i++) {
                     if(numbersOrder.get(i)==key) {
                         counterOrder++;
                     }
                   }
                 sBuilder.append(',').append(counterOrder);
                 }
         }
          System.out.println(sBuilder.toString());
    }
  }
}

所有的輸入都是綠色的,進一步可以看到程序運行后的output是部分組成的,只有在最后才完整顯示。

圖像

我從這個問題中了解到的是,您想先從控制台讀取所有行,然后需要執行任何操作或工作,然后,您想在控制台上打印每一行的結果。 如果是這種情況,那么您需要創建一個中間數組或列表來保存每一行的數據。 請參考以下步驟:

  1. 創建一個空列表作為readLineByLineString逐行保存您的輸入。
  2. 使用ScannerBufferedReader從控制台讀取行。
  3. 通過readLineByLineString.add(line);
    • 閱讀所有行並添加到列表中,直到所有測試用例都滿足或要求的條件。
  4. 現在您將所有數據逐行放在中間列表中,即readLineByLineString ,只需執行所需的操作。
  5. 每次操作后Print結果。
  6. 結尾

例如,您一次可以讀取 1024 個字節。

char[] myBuffer = new char[512];
int bytesRead = 0;
BufferedReader in = new BufferedReader(new FileReader(reader));
while ((bytesRead = in.read(myBuffer,0,1024)) != -1)
{ ...  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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