2017-02-03 4 views
0

Also ich schreibe ein Programm, das die Max, Min, Total und Durchschnitt der Gehälter einiger Leute finden. Ich habe beschlossen, die Namen der Leute in Arraylist-Zeichenketten und ihre Gehälter in Arraylisten-Ganzzahlen zu setzen. Mein Problem ist, dass man die maxsalary, minsalary, averagesalary zur Ausgabe, die ich als Doppel werden soll, und der Gesamtgehalt, weil, wenn ich mein Programm laufen sie jeden der Werte als 0 Implementieren und Ausgeben von ArrayLists

gibt hier ist mein Code:

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

Ihre Klasse einige Fehler enthält. Ich würde einen umgekehrten Ansatz dafür vorschlagen. Sehen Sie sich https://docs.oracle.com/javase/8/docs/api/java/util/DoubleSummaryStatistics.html (DoubleSummaryStatistics) an und überlegen Sie, wie Sie Ihre Klasse umgestalten können, um diese integrierte Java-Funktionalität zu nutzen. – Magnilex

Antwort

0

Es gibt einige logische Fehler in Ihrer Implementierung.

Zunächst einmal alle sollten Sie

int maxSal; 
int minSal; 
int totalSal; 
double averageSal; 

innerhalb Ihrer Methoden und init sie mit 0

bearbeiten Es ist nicht notwendig, sie init. Standardmäßig sind sie auf 0 gesetzt. Wie Sie hier sehen können: Primitive Datatypes in JAVA

Der zweite Fehler liegt innerhalb Ihrer Summenmethode.

totalSal += salaries.indexOf(i); 

Wenn Sie einen Blick in die api:

indexOf Methode gibt den Index des ersten Auftreten

Änderung es zu:

totalSal += salaries.get(i); 

Besserer Weg zu Mach deine Sachen:

Sie müssen es nicht auf eigene Faust implementieren. Es gibt Libs Vordergrund, dass:

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

_init sie mit 0_. Keine Notwendigkeit dafür. Die Standardwerte für diese Grundelemente sind 0. – Magnilex

+0

ich stimme dem völlig zu. Aber wenn er die Objektfelder löscht, kann er nicht verstehen, warum es nicht nötig ist, sie zu initiieren. wird meine Antwort erweitern. ty – osanger

+0

Ich benutze es ohne Java 8, was das Gehalt darstellt, weil ich die Arraylist Gehälter verwendet und es scheint nicht zu nehmen, wenn ich Gehalt mit Gehältern ersetzt – JustAJAVAGUY

Verwandte Themen