# Anzahl der eingegebenen Zahlen  ausgeben



## fischldi (25. Apr 2010)

Hallo Community!

Mein Programm macht bisher brav was es soll,nämlich Zahlen sortieren die per Kommandozeilenparameter übergeben werden.

Nun soll ich eine Statistik schreiben und ausgeben wieoft denn welche Zahl eingegeben wurde...gibts da vielleicht ne hilfreiche fertige Funktion?:bahnhof:

Caro


----------



## Nicer (25. Apr 2010)

Switch Case 

ich schreib dir gleich ein beispiel , hab grade noch Raid 

raid geht noch so 20 minuten , dann postich dir was.


----------



## nrg (25. Apr 2010)

Collections (Java Platform SE 6)

edit: switchcase geht schon auch aber find ich jetz net so hübsch.


```
List<Integer> list = new ArrayList<Integer>();
		list.add( 41 );
		list.add( 6 );
		list.add( 10 );
		list.add( 100 );
		list.add( 6 );
		list.add( 100 );
		list.add( 6 );
		list.add( 41 );
		list.add( 5 );
		list.add( 41 );
		Collections.sort( list );
		
		Set<Integer> set = new HashSet<Integer>();
		set.addAll( list );
		for ( Integer i : set ) {
			System.out.println( "Die " + i + " ist " + Collections.frequency( list, i ) + "mal vorhanden" );
		}
```

edit2: der sort wird jetzt für das beispiel nicht benötigt. hab ich jetzt nur rein, weil du ja meintest, dass du sie sortierst


----------



## eRaaaa (25. Apr 2010)

Mein Vorschlag:

```
for (int i = 0, count = 0; i < args.length; i += count) {
			count = 0;
			for (int j = i; j < args.length && args[i].equals(args[j]); j++) {
				count++;
			}
			System.out.println(args[i] + " ist " + count + " mal vorhanden");
		}
```


----------



## Nicer (25. Apr 2010)

```
public class Statistik {

	public void statistik(int input) {

		int statistic1 = 0, statistic2 = 0, statistic3 = 0, statistic4 = 0, statistic5 = 0, statistic6 = 0, statistic7 = 0, statistic8 = 0, statistic9 = 0, statistic0 = 0;

		switch (input) {
		case 1:
			statistic1 = statistic1 + 1;
			break;
		case 2:
			statistic2 = statistic2 + 1;
			break;
		case 3:
			statistic3 = statistic3 + 1;
			break;
		case 4:
			statistic4 = statistic4 + 1;
			break;
		case 5:
			statistic5 = statistic5 + 1;
			break;
		case 6:
			statistic6 = statistic6 + 1;
			break;
		case 7:
			statistic7 = statistic7 + 1;
			break;
		case 8:
			statistic8 = statistic8 + 1;
			break;
		case 9:
			statistic9 = statistic9 + 1;
			break;
		case 0:
			statistic0 = statistic0 + 1;
			break;
		}

		System.out.println("1 :" + " " + statistic1 + "," + "2 :" + " "
				+ statistic2 + "," + "3 :" + " " + statistic3 + "," + "4 :"
				+ " " + statistic4 + "," + "5 :" + " " + statistic5 + ","
				+ "6 :" + " " + statistic6 + "," + "7 :" + " " + statistic7
				+ "," + "8 :" + " " + statistic8 + "," + "9 :" + " "
				+ statistic9 + "," + "0 :" + " " + statistic0 + ",");
	}

	public static void main(String[] args) {
		Statistik stat = new Statistik();
		stat.statistik(1);
	}
}
```

bei input gibstu halt deinen input mit


----------



## nrg (25. Apr 2010)

aha. das funktioniert von 0-9. wenn er nicht mehr will wäre es eine option aber da ist meine oder eraas (denke die ist weng performanter) variante imho besser.


----------



## Final_Striker (25. Apr 2010)

Nicer hat gesagt.:


> ```
> bei input gibstu halt deinen input mit :)[/QUOTE]
> 
> ohje...
> ...


----------



## Illuvatar (25. Apr 2010)

Nicer hat gesagt.:


> bei input gibstu halt deinen input mit



Außerdem find ichs jetzt nicht unglaublich spannend, bei einem input von einer Zahl zu zählen, wie oft welche Zahl vorkommt... ???:L


----------



## bygones (26. Apr 2010)

ich hoff der raid war erfolgreicher ;-)


----------



## nrg (26. Apr 2010)

bygones hat gesagt.:


> ich hoff der raid war erfolgreicher ;-)



 saved my day


----------



## Nicer (26. Apr 2010)

jo , mein raid war erfolgreich !

und ja : wenn du 100 zahlen auswerten willst musst du die Int Vars für 1 - 100 schreiben und auch die Switch Case funktion


----------



## nrg (26. Apr 2010)

Nicer hat gesagt.:


> jo , mein raid war erfolgreich !
> 
> und ja : wenn du 100 zahlen auswerten willst musst du die Int Vars für 1 - 100 schreiben und auch die Switch Case funktion



den post nach zwei "vierzeilern", die ohne Probleme von -x bis +x funktionieren, fand ich dann nur etwas verwunderlich


----------



## fischldi (27. Apr 2010)

Ich hab den Vorschlag von eRaaa mal ausprobiert und bekomme folgende Fehlermeldung :
"sort.java:41: int cannot be dereferenced
            for (int j = i; j < daten.length && daten_.equals(daten[j]); j++) {
                                                        ^
1 error
"

Muss ich vielleicht noch ne bibilothek einbinden?

Hier der Code:



		Java:In die Zwischenablage kopieren


import java.lang.String;
import java.util.Scanner; 

public class sort{

public static void sortieren(int[] daten)
{
for(int i=0;i<daten.length;i++)
{
int min = i;
for (int j = i+1; j < daten.length; j ++ )
{
                if (daten[j]<daten[min]) {
                    
                    min=j;
                }
}
            int hilf=daten[i];
            daten[i]=daten[min];
            daten[min]=hilf;
}
}

public static void ausgeben(int[] daten)
{
for(int k=0;k<daten.length;k++)
System.out.println(daten[k]);
}

public static void vorkommen(int [] daten)
{
 for (int i = 0, count = 0; i < daten.length; i += count) {
            count = 0;
            for (int j = i; j < daten.length && daten[i].equals(daten[j]); j++) {
                count++;
            }
            System.out.println(daten[i] + " ist " + count + " mal vorhanden");
        }

}

public static void main(String[] args){

int anzahl = args.length;
int []daten=new int[anzahl];

for(int i=0;i<args.length;i++)
{
daten[i]=Integer.parseInt(args[i]);
}

ausgeben(daten);
System.out.println("-------------");
sortieren(daten);
ausgeben(daten);
System.out.println("vorkommen");
vorkommen(daten);
System.out.println("---------------");
ausgeben(daten);
}
}

_


----------



## eRaaaa (27. Apr 2010)

Ah okay, du hast nun ein int -Array..also keine Objekte, (hatte mich auf deinen Code aus dem anderen Thread bezogen, da hattest du das ja im args-Array gelassen, demzufolge also Strings ;D ) dann geht equals natürlich nicht... ersetze equals durch == 

```
public static void vorkommen(int[] daten) {
		for (int i = 0, count = 0; i < daten.length; i += count) {
			count = 0;
			for (int j = i; j < daten.length && daten[i] == daten[j]; j++) {
				count++;
			}
			System.out.println(daten[i] + " ist " + count + " mal vorhanden");
		}

	}
```


----------



## ARadauer (27. Apr 2010)

Ich würds so machen...


```
import java.util.ArrayList;
import java.util.HashMap;


public class ElementCounter{
	
	HashMap<Integer, Integer> elements = new HashMap<Integer, Integer>();
	
	public void addElement(Integer element){
		Integer count = elements.get(element);
		if(count==null)
			count = 0;
		count++;
		elements.put(element, count);	
	}
	
	public int getCountForElment(Integer element){
		Integer count = elements.get(element);
		return count==null?0:count;
	}
	
	public ArrayList<Integer> getElements(){
		return new ArrayList<Integer>(elements.keySet());
	}
	
	public static void main(String[] args)
	{
		ElementCounter counter = new ElementCounter();
		counter.addElement(11);
		counter.addElement(11);
		counter.addElement(222);
		counter.addElement(222);
		counter.addElement(3);
		counter.addElement(4);
		
		for(Integer element :counter.getElements()){
			System.out.println(element+":\t"+counter.getCountForElment(element)+" mal");
		}
	}

}
```
aber du darfst sicher keine HashMap verwenden...


----------

