2017-03-02 43 views
-1

獲得特定元素餵我解決給我這個問題,我必須找到具有至少索引ID如何從ArrayList中

import java.util.*; 
import java.io.*; 

public class Main { 
    public static int processData(ArrayList<String> array) { 
     for (String elem :array){ 
     System.out.println(elem); 
     } 

     return 0; 
    } 

    public static void main (String[] args) { 
     ArrayList<String> inputData = new ArrayList<String>(); 
     try { 
      Scanner in = new Scanner(new BufferedReader(new FileReader("input.txt"))); 
      while(in.hasNextLine()) { 
       String line = in.nextLine().trim(); 
       if (!line.isEmpty()) // Ignore blank lines 
        inputData.add(line); 
      } 
      int retVal = processData(inputData); 
      PrintWriter output = new PrintWriter(new BufferedWriter(new FileWriter("output.txt"))); 
      output.println("" + retVal); 
      output.close(); 
     } catch (IOException e) { 
      System.out.println("IO error in input.txt or output.txt"); 
     } 
    } 
} 

程序接受來自文本文件輸入一個人的平均工資如下

282, ij, 11, 1600000 
273, cbg, 12, 800000 
567, nj, 11, 800000 
539, cb, 11, 600000 

所以輸出將是

11 520000 

我能夠打印ELEM從數組列表中刪除但不能訪問特定元素。任何人都可以幫助我訪問特定的元素,在這種情況下,11,160000等等?

預先感謝您

+1

你看過'.split()'或'StringTokenizer'嗎? –

+0

[Java:CSV文件易讀/寫]的可能重複(http://stackoverflow.com/questions/14226830/java-csv-file-easy-read-write) –

+1

首先,你應該學會如何劃分你的問題變成更小的問題。之後,分別解決每個問題並將它們結合在一起。如果你對某個小問題有任何問題,那麼解決這個問題就容易多了。這不是關於編碼,而是處理問題的方式。 – halil

回答

0

提示

你可以這樣計算該指數11的AVG:

public static int processData(ArrayList<String> array) { 
    String[] spl; 
    int avg = 0, nbr = 0; 

    for (String elem : array) { 
     //split your String with ", " and space 
     spl = elem.split(", "); 
     //the index exist in the 3ed position, so you have to check your index if 11 then you can get its value 
     if(spl[2].equals("11")){ 
      avg+=Integer.parseInt(spl[3]); 
      nbr++; 
     } 
     System.out.println(elem); 
    } 
    System.out.println((avg/nbr)); 
    return avg/nbr; 
} 

當你在你的代碼打印,你必須使用:

output.println("11 " + retVal); 

希望本文能給你一個想法。

0

您創建一個字符串列表來存儲包含多個字段的員工數據。
您不應該因爲它混合了數據員工。

一般的想法,我建議你:

1)不是存儲在字符串列表中的所有信息,使用員工的名單。

通過

List<Employee> employees = new ArrayList<Employee>(); 

2取代

ArrayList<String> inputData = new ArrayList<String>(); 

)使用每個讀取代表一個人來創建自定義對象的實例,例如員工行。

所以更換

inputData.add(line); 

通過類似的東西

String[] token = line.split(","); 
Employee employee= new Employee(Integer.valueOf(token[0]),token[1],Integer.valueOf(token[2]),Integer.valueOftoken[3])); 
employees.add(employee); 

3)在本次迭代讀取文件,你可以在一個變量,它是用最小內徑爲員工存儲。

4)讀完文件後,您知道僱員的ID最小。因此,您可以在「員工列表」上進行迭代,然後對具有此ID的員工的工資進行彙總並計算此員工的工資數量。
當循環結束時計算平均值:float avg = sum/(float)count;

這不是最優化的方式,但它使工作。

0

以下代碼將執行您所需的操作。

public class MyMain { 

    private static String inputFilePath = "/path/to/input.txt"; 
    private static String outputFilePath = "/path/to/output.txt"; 

    public static int processData(ArrayList<MyData> array) { 
     if (array.size() > 0) { 
      int minId = array.get(0).getData3(); 

      for (MyData elem : array) { 
       if(elem.getData3() < minId) { 
        minId = elem.getData3(); 
       } 
      } 

      int count = 0; 
      int total = 0; 
      for (MyData myData : array) { 
       if(myData.getData3() == minId) { 
        count++; 
        total += myData.getData4(); 
       } 
      } 

      System.out.println("Min ID : " + minId + " -- Avg Sal : " + total/count); 
     } 

     return 0; 
    } 

    public static void main(String[] args) { 
     ArrayList<MyData> inputData = new ArrayList<>(); 
     try { 
      Scanner in = new Scanner(new BufferedReader(new FileReader(inputFilePath))); 
      while (in.hasNextLine()) { 
       String line = in.nextLine().trim(); 
       if (!line.isEmpty()) // Ignore blank lines 
        inputData.add(new MyData(line)); 
      } 
      int retVal = processData(inputData); 
      PrintWriter output = new PrintWriter(new BufferedWriter(new FileWriter(outputFilePath))); 
      output.println("" + retVal); 
      output.close(); 
     } catch (IOException e) { 
      System.out.println("IO error in input.txt or output.txt"); 
     } 
    } 

} 

class MyData { 
    int data1; 
    String data2; 
    int data3; 
    int data4; 

    public MyData() { 
     // TODO Auto-generated constructor stub 
    } 

    public MyData(String data) { 
     String dataArr[] = data.split(","); 
     this.data1 = Integer.parseInt(dataArr[0].trim()); 
     this.data2 = dataArr[1].trim(); 
     this.data3 = Integer.parseInt(dataArr[2].trim()); 
     this.data4 = Integer.parseInt(dataArr[3].trim()); 
    } 

    public int getData1() { 
     return data1; 
    } 

    public void setData1(int data1) { 
     this.data1 = data1; 
    } 

    public String getData2() { 
     return data2; 
    } 

    public void setData2(String data2) { 
     this.data2 = data2; 
    } 

    public int getData3() { 
     return data3; 
    } 

    public void setData3(int data3) { 
     this.data3 = data3; 
    } 

    public int getData4() { 
     return data4; 
    } 

    public void setData4(int data4) { 
     this.data4 = data4; 
    } 

}