Das Maximum einer Liste ermitteln

jura818

Mitglied
Hallo ,
ich hoffe ihr könnt mir helfen !Versuche eine Methode zu schreiben ,die das Maximum meiner Liste ermittelt .Hab aber leider gerade überhaupt keine Idee .Meine Liste:
Java:
class ListenElement2{
		
	ListenElement2 pre;
	ListenElement2 next;
	int inhalt;
	
	ListenElement2(){};
	
	ListenElement2(ListenElement2 ne,int in){
		
		next=ne;
		in=inhalt;
		
	}
		ListenElement2(ListenElement2 pr,ListenElement2 nex,int in){	
		pre=pr;
		next=nex;
		inhalt=in;
}
	
}


public class Liste2 {

	ListenElement2 root;
	

	boolean swap(int i,int j){//Methode zu vertauschen zweier Elemente 
		
		if(Math.max(i,j) >= laenge()){return false;}
		
				else{
					
			int aa = get(Math.min(i,j));
			set(Math.min(i,j),get(Math.max(i,j)));
			set(Math.max(i,j),aa);
			
		}
		
		return true;
		
	}
	
	boolean swap2(int i,int j){//Methode zu vertauschen zweier Elemente 
		
		if(Math.max(i,j) >= laenge()){return false;}
		
		ListenElement2 l1 = root;
		ListenElement2 l2 = root;
		
		for(int k = 0 ; k < Math.max(i, j); k++){
			if(k < Math.min(i,j)) l1 = l1.next;
			l2 = l2.next;
		
		}


	
	
		ListenElement2 temp1 = null;
		
		 l1.pre.next = l2;
		 l2.pre.next = l1;
		 temp1 = l1.pre;
		 l1.pre = l2.pre;
		 l2.pre = temp1; 
		 temp1 = l1.next;
		 l1.next = l2.next;
		 l2.next = temp1;

		 
		
		return true;
			

	}
int laenge(){
		int a = 0;
		ListenElement2 b = root;
		
		while(b != null){
			b = b.next;
			a++;}
		return a;}
	
	
		int get(int pos){
		
		int erg = 0;
		ListenElement2 b = root;
		
		if(pos < 0 || this.laenge() < pos){ System.out.println("falscher Index"); return Integer.MAX_VALUE;}
		else{
			for(int i = 0; i < pos; i++){
				b = b.next;}
			
			erg = b.inhalt;
			return erg;	
			} 
			
		}
	
		boolean set(int pos, int val){
		
		ListenElement2 b = root;
		if(pos < 0 || this.laenge() < pos){ System.out.println("falscher Index"); return false;}
		else{
			for(int i = 0; i < pos; i++){
				b = b.next;
			}
			
			b.inhalt = val;
			return true;				
		}
	}
Vielen Dank im vorraus
 
Guten Tag,
Du iterierst einfach durch deine Liste und merkst dir immer das größte Element, indem du das aktuelle Element mit dem größten vergleichts. Die Liste kann auch leer sein, das must du seperat behandeln.

mfg. Dagobert
 
- erstes element der liste holen, speichern.
- die liste durchlaufen, aktuellen wert mit dem gespeicherten vergleichen, wenn dieser höher ist, alten wert mit aktuellem überschreiben
- wenn die liste durchlaufen ist, den gespeichernten wert zurückgeben

*edit* da war wieder einer schneller 🙂
 
Bevor ich zu deiner Frage komme ein paar Bemerkungen:

1.) Hast du davon schonmal was getestet? Ich wüsste nicht wie, weil dir z.B: ein Konstruktor für deine Liste fehlt und du imho einen kleinen Fehler bei deinem zweiten ListenElement2-Konstruktor gemacht hast, das müsste heißen
Java:
    ListenElement2(ListenElement2 ne,int in){
        
        next=ne;
        inhalt=in;
        
    }
2.) Ich gehe mal davon aus, dass du die Klasse für irgendeine AUfgabe selber schreiben MUSST, ansonsten kannst du natürlich einfach die vorimplementierte Methode LinkedList benutzen
3.) Ich kenne natürlich deine Aufgabenstellung nicht, aber wichtiger als Elemente zählen wäre im Moment imho eine einfügen-Methode, im Moment wird die Liste immer die Länge 0 haben

So, zu deiner Frage: Iteriere einfach durch die Liste durch (wie in laenge()) und vergleiche dabei immer das aktuelle Element mit dem bisherigen Maximum.

EDIT:
bei mir waren sogar 2 schneller, aber ich halte wie gesagt die fehlende maximums-Funktion für das eher sekundäre Problem bei dem obigen Code
 
Das ist sozusagen meine Einfügen Methode :
Java:
public static void main(String[] args) {
			
			Liste2 test = new Liste2();
			test.root = new ListenElement2();
			test.root.inhalt = 1;
			test.root.next = new ListenElement2(test.root,null,2);
			test.root.next.next = new ListenElement2(test.root.next,null,3);
			test.root.next.next.next = new ListenElement2(test.root.next,null,4);
						
			System.out.print(test.get(1) + " " + test.get(2));
			System.out.println(" ");
			test.swap(1,2);
			System.out.print(test.get(1) + " " + test.get(2));		
			System.out.println(" ");
			test.swap2(1,2);
			System.out.print(test.get(1) + " " + test.get(2));		
		
		
		
			
		}

	}

funktioniert auch alles einwandfrei ,nur halt die Maximum Methode .Hab das so versucht aber scheint nicht wirklich sinnvoll zu sein ,wobei auch zwei Fehler angezeigt werden .
Java:
ListenElement2 max(int inhalt){
			
			
			ListenElement2 max=null;
			
			
			for(ListenElement2 i =root;i!=null;i=i.next){
			
		if(i.inhalt.next>max)	
			
			max=i.inhalt.next;
			
			}
		return max;	
			
				
			
		}
 
Du willst in max doch den größten Wert, der vorkommt abspeichern, warum ist max dann ein ListenElement? Das muss ein int sein, dass du dann mit 0 oder (falls auch negative Werte in den Elementen stehen können) noch besser mit Integer.MIN_VALUE initialisierst

EDIT:
sorry, das ist noch nicht alles:

Java:
ListenElement2 max(int inhalt){
            
            
  int max=Integer.MAX_VALUE;
  for(ListenElement2 i =root;i!=null;i=i.next){        
    if(i.inhalt>max)
      max=i.inhalt;
    }
  return max;
}

Das müsste imho funktionieren
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben