# algorithmus zum finden der größten zahl von vieren



## geruetzel (24. Mrz 2010)

hallo, 
hab ein problem mit diesem algorithmus...
ich habe vier variablen (a,b,c,d) eingelesen und möchte als ergebnis die größte der vier zahlen ausgeben.
wenn a oder b die größten werte haben, funktioniert dies auch, bei c und d jedoch kommt nichtmal eine ausgabe ...
vielleicht könnt ihr mir helfen? 

vielen dank!


```
if (a > b) {
			if (a > c) {
				if (a > d) {
					System.out.println("a");				
				} else {
					System.out.println("d");	
				}		
			} else if (c > d) {
				System.out.println("c");	
			} else {
				System.out.println("d");
			}
		} else if (b > c){
			if (b > d) {
				System.out.println("b");			
			} else {
				System.out.println("d");
			}
		}
```


----------



## Schandro (24. Mrz 2010)

du hast nicht den kompletten Code gepostet...
grundsätzlich: Warum benutzt du kein Array statt den 4 Variablen? Das wär viel einfacher, dynamischer und du musst weniger Code schreiben (=> es können weniger Tippfehler entstehen).


----------



## eRaaaa (24. Mrz 2010)

http://www.java-forum.org/java-basics-anfaenger-themen/19111-max-4-zahlen.html


----------



## geruetzel (24. Mrz 2010)

danke für die schnelle antwort.
hier der gesamte code...

es geht darum einen text einzulesen und die a b c und d in diesem zu zählen und auszugeben, welcher der 4 buchstaben am häufigsten vorkommt.
wir _sollen_ es ohne array lösen um mit algorithmen vertraut zu werden!



```
import java.util.Scanner;

class frequency {

	public static void main (String args[]) 
	{
	
		Scanner scan = new Scanner(System.in);

		System.out.println("Bitte Text eingeben! Dieser darf ausschließlich die Buchstaben a,b,c und d beinhalten!");
		System.out.println("");

		String eingabe = scan.nextLine();

		System.out.println("");
			
		int charAnz = eingabe.length();	
	
		int aCount = 0;
		int	bCount = 0;
		int cCount = 0;
		int dCount = 0;

		for (int i=0; i<charAnz; i++) {
		
			char buchst = eingabe.charAt(i);
			

			if (buchst == 'a')
				aCount++;
			if (buchst == 'b')
				bCount++;
			if (buchst == 'c')
				cCount++;
			if (buchst == 'd')
				dCount++;
			
		}
		
		System.out.println("a kommt " + aCount + " Mal vor");
		System.out.println("b kommt " + bCount + " Mal vor");
		System.out.println("c kommt " + cCount + " Mal vor");
		System.out.println("d kommt " + dCount + " Mal vor");

		System.out.println("");
				
			
		
		if (aCount > bCount) {
			if (aCount > cCount) {
				if (aCount > dCount) {
					System.out.println("a");				
				} else {
					System.out.println("d");	
				}		
			} else if (cCount > dCount) {
				System.out.println("c");	
			} else {
				System.out.println("d");
			}
		} else if (bCount > cCount){
			if (bCount > dCount) {
				System.out.println("b");			
			} else {
				System.out.println("d");
			}
		}

		
		
		

		
		
		
		
	}

}
```


----------



## Murray (24. Mrz 2010)

geruetzel hat gesagt.:


> ```
> if (aCount > bCount) {
> /* ... */
> } else if (bCount > cCount){
> ...


Man sieht, dass das nicht vollständig ist: wenn aCount <= bCount, dann wird der erste Zweig nicht durchlaufen. Wenn bCount <= cCount, dann wird der zweite Zweig nicht durchlaufen.
Es gibt also eine ganze Reihe von Kombinationen, in denen weder der erste noch der zweite Zweig durchlaufen wird.


----------



## geruetzel (24. Mrz 2010)

puh danke, das hat geholfen... hab noch nicht so das auge für so dumme fehler - vielen vielen dank!


----------



## Schandro (24. Mrz 2010)

warum machstes nicht einfach so, find ich persönlich einfacher zu lesen, weils keine Verschachtelungen gibt: (das "highest =" kann man natürlich genausogut mit System.out.println ersetzen, das is egal...)

```
int highest;
		if(a>b && a>c && a>d){
			highest = a;
		} else if(b>c && b>d){
			highest = b;
		} else if(c>d){
			highest = c;
		} else{
			highest = d;
		}
```


----------

