Mein Suchalgorithmus funktoniert nicht

MinaM

Mitglied
Hallo,
ich möchte aus einem Array mit 10 Elementen das Element mit dem größten
Wert ausgeben.
Mein Algorithmus funktionier aber nicht.
Weiß jemand warum?

Code:
	public static void main(String[] args) {
		
		int[] sucheMax = {1,8,4,5,6,14,4,2,1,12};
		
		int maximum = 0;
		int i;
		for(i=0; i<=sucheMax.length-1;i++)
		{
			if(sucheMax[i]> sucheMax[maximum])
			{
				maximum = sucheMax[i];
			}
			
		}
		System.out.println("Die größte Zahl ist "+maximum);
		
	}

Ich bekomme immer eine ArrayOutOfBoundException.

lg Mina
 

kabel2

Erfahrenes Mitglied
Code:
		int[] sucheMax = {1,8,4,5,6,14,4,2,1,12};
 // more stuff
			if(sucheMax[i]> sucheMax[maximum])
			{
				maximum = sucheMax[i];
			}
das muss heißen maximum= i;

maximum enthaelt bei dir den Index in das Array sucheMax. Mit der Zuweisung hast du allerdings den bisher maximalen Wert als neuen Index benutzt. Das ist aber falsch.

HTH
 

Thomas Darimont

Erfahrenes Mitglied
Hallo!

ich würde das einfach so abändern:
Code:
	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		int[] sucheMax = { 1, 8, 4, 5, 6, 14, 4, 2, 1, 12 };
 		int maximum = 0;
 		for (int i = 0, current = 0; i < sucheMax.length; current=sucheMax[i++]) {
 			if (current > maximum) {
 				maximum = current;
 			}
 		}
 		System.out.println("Die größte Zahl ist " + maximum);
 	}

Gruß Tom
 

kabel2

Erfahrenes Mitglied
Bitte den Thread Richtung Unterforum "Algorithmen und Datenstrukturen mit Java" verschieben. (Ist das eine Meldung wert?)
 

RedWing

Erfahrenes Mitglied
Thomas Darimont hat gesagt.:
Hallo!

ich würde das einfach so abändern:
Code:
	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		int[] sucheMax = { 1, 8, 4, 5, 6, 14, 4, 2, 1, 12 };
 		int maximum = 0;
 		for (int i = 0, current = 0; i < sucheMax.length; current=sucheMax[i++]) {
 			if (current > maximum) {
 				maximum = current;
 			}
 		}
 		System.out.println("Die größte Zahl ist " + maximum);
 	}

Gruß Tom

es sollte angesichst des Wertebereichs glaube auch für negative Zahlen gehen, also entweder in deinem
Code maximum mit sucheMax[0] oder Integer.MIN_VALUE initialisieren oder kabel2's Variante

Gruß

RedWing
 

Thomas Darimont

Erfahrenes Mitglied
Hallo!

jo, da hast du recht:
Code:
  	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		int[] sucheMax = { 1, 8, 4, 5, 6, 14, 4, 2, 1, 12 };
    		int maximum = Integer.MIN_VALUE;
 		for (int i = 0, current = Integer.MIN_VALUE; i < sucheMax.length; current=sucheMax[i++]) {
    			if (current > maximum) {
    				maximum = current;
    			}
    		}
    		System.out.println("Die größte Zahl ist " + maximum);
 
 //Das minimum gäbs dann dementsprechend über:
 int minimum = Integer.MAX_VALUE;
 		for (int i = 0, current = Integer.MAX_VALUE; i < sucheMax.length; current = sucheMax[i++]) {
 			if (current < minimum) {
 				minimum = current;
 			}
 		}
 		System.out.println("Die kleinste Zahl ist " + minimum);
 
     	}


Gruß Tom