2017-02-03 50 views
0

因此,我正在編寫一個程序,可以查找某些人的工資的最大值,最小值,總計和平均值。我已經決定把人們的姓名列入數組列表字符串和他們的工資列入數組列表整數。我的問題是能夠輸出maxsalary,minsalary,averagesalary,我想作爲一個雙,總工資,因爲當我運行我的程序它給每個值的爲0實現和輸出arrayLists

這裏是我的代碼:

package employees; 

import java.util.ArrayList; 

public class Persons { 
    //method to add salaries 
    //find average and min and max 
    int maxSal; 
    int minSal; 
    int totalSal; 
    double averageSal; 
    public ArrayList people; 
    public ArrayList salaries; 

    public int totals() { 
     //int totalSal = 0; 
     for(int i = 0; i < salaries.size(); i++) 
      totalSal += salaries.indexOf(i); 
     return totalSal; 
    } 

    public int minSal() { 
     //minSal = 0; 
     for(int i = 0; i < salaries.size(); i++) 
       if(minSal > i) 
        minSal = i; 
     return minSal; 
    } 

    public int maxSal() { 
     //maxSal = 0; 
     for(int i = 0; i < salaries.size(); i++) 
       if(i > maxSal) 
        maxSal = i; 
     return maxSal; 
    } 

    public double averageSal() { 
     double averageSal =((totalSal)/5); 
     return averageSal; 
    } 
} 

//mainmethod 
package employees; 

import java.util.ArrayList; 

public class PersonsTest { 

    Persons persons; 
    Job job; 

    public static void main(String[] args) { 
     Persons g = new Persons(); 

     ArrayList<String> people = new ArrayList<String>(); 
     people.add("Ron"); 
     people.add("Don"); 
     people.add("Armin"); 
     people.add("Ferry"); 
     people.add("Ben"); 
     ArrayList<Integer> salaries = new ArrayList<Integer>(); 
     salaries.add(50000); 
     salaries.add(40000); 
     salaries.add(70000); 
     salaries.add(55000); 
     salaries.add(90000); 

     System.out.println(g.maxSal); 
     System.out.println(g.minSal); 
     System.out.println(g.averageSal); 
     System.out.println(g.totalSal);  
    } 
} 
+0

你的類包含一些瑕疵。我會建議對此做出反向處理。查看https://docs.oracle.com/javase/8/docs/api/java/util/DoubleSummaryStatistics.html(DoubleSummaryStatistics),並考慮如何重構您的類以利用此內置Java功能。 – Magnilex

回答

0

您的實施中存在一些邏輯錯誤。

首先你應該使用

int maxSal; 
int minSal; 
int totalSal; 
double averageSal; 
你的方法中

,並與0

初始化它們編輯 這並不需要初始化它們。默認情況下,它們設置爲0.正如您在此處看到的: Primitive Datatypes in JAVA

第二個錯誤在您的總計方法中。

totalSal += salaries.indexOf(i); 

如果你看看到API:

的indexOf方法返回第一次出現

它變化的指標:

totalSal += salaries.get(i); 

更好的方法做你的東西:

你不必自己實現它。有庫脫穎而出的是:

EDIT 2個

import java.util.Arrays; 
import java.util.Collections; 
import java.util.stream.*; 

    ArrayList<Integer> salary = new ArrayList<Integer>(); 
    salary.add(50000); 
    salary.add(40000); 
    salary.add(70000); 
    salary.add(55000); 
    salary.add(90000); 



    System.out.println(Collections.min(salary)); 
    System.out.println(Collections.max(salary)); 

    /*Without java 8*/ 
    int sum = 0; 
    for (Integer e : salary) sum += e; 
    System.out.println(sum); 
    /*AVG*/ 
    double avg = sum/salary.size(); 
    System.out.println(sum); 
    System.out.println(avg); 
+0

_用0_來啓動它們。不需要這個。這些基元的默認值是0. – Magnilex

+0

我完全同意這一點。但是如果他刪除了對象字段,他可能不明白爲什麼不需要啓動它們。將擴大我的答案。 ty – osanger

+0

我在沒有java的情況下使用它8,薪水代表什麼,因爲我使用了數組列表工資,而且當我用薪水替換工資時似乎沒有采用這種方法 – JustAJAVAGUY