HILFE! Strings mit CompareTo vergleichen

  • Themenstarter Themenstarter 10Sayumi
  • Beginndatum Beginndatum
1

10Sayumi

Gast
Hallo ich habe erst angefangen Java zu benutzen und hier habe ich ein Problem, das ich nicht lösen kann, ich wäre euch echt dankbar für jede antwort 🙁

Also ich dachte mir, ich möchte Drei wörter einlesen und dann lexografisch angeortnet wieder ausgeben.
ich habe nun jeden Millimeter meines Programms durch gesucht und einzeln laufen lassen. Ich bekomme aber immer als Ergebnis
Wort 1 : null
Wort 2 : null
Wort 3 : null

also schreibt es keine werde in das array ( w[0], w[1],w[2])

ich habe nun die stelle gefunden an der es liegt:

-> meine If schleifenkopf: if(wort.CompareTo(x[i+1]) < 0)

aber was ist hier falsch? wort ist string und es steht auch einer drin (schon getestet) , in x stehen die zu sotierenden wörter (schon getestet)

ich bin ratlos 🙁

lg 'Java Neuling'
 
Okay

Java:
import java.io.*;
import java.util.*;

public class SortierenWoerter{


public static void main(String[] args)throws IOException{

//Initialisierung
String x[] = new String[3];
String r[] = new String[3];

int y = 0;
int i;
double zs;

//double zs; //Zwischenspeicher

//Einlesen und speichern der Woerter
InputStreamReader read = new InputStreamReader(System.in);
BufferedReader input = new BufferedReader(read);

for(i=0;i<3;i++){

	System.out.print( i+1 + ". Wort : ");


	x[i] = input.readLine();
	}

//erstes Wort zwischen speichern



//Vergleichen
String wort=x[0];
int d;


// Schleife1 damit gesammter Prüfvorgang drei mal gemacht wird für jedes Wort also
for(d=0;d<2;d++){

	/* vergleich s1 mit s2, wenn s2 größer, geht es mit s2 zu s3 weiter, 
	 * wenn dann rückgabe <0, ist s2 größer als alle anderen und muss vermindert werden, 
	 * damit beim nächsten durchgang s2 unter keinem umstand wieder "gewinnt" -> ermittlung der zweiten stelle.
	*/
	for(i=0;i<1;i++){

		if(wort.compareTo(x[i+1]) < 0){
			if(i+1 >=2){
				r[y] = String.valueOf(wort);
				y++;
				x[i] = "zzzzzzzzz";
			}
			else{
				wort=x[i+1];
			}
			//r[y] = String.valueOf(wort);
		}

		else{

			wort = x[i+1];
			//f =i+1;
			
			if(i+1 == 2){
				r[y] = String.valueOf(wort);
				y++;
				x[i+1] = "zzzzzzzzz";
			}
		}	
	}
	
	wort = x[0];
}

//r[i] = String.valueOf(wort);
//System.out.println(x[0].compareTo(x[1]));
	// Ausgeben

		System.out.println("Lexikografische Ordnung: ");

		for(i=0;i<3;i++){

			System.out.println(i+1 + ". : " + r[i]);

		}

}
}

🙂
 
Ich kann dir klar sagen, warum du da null bekommst: Du schaust ja, was in r steht, nicht was in dem x ist.
Nebenbei ist dein Code relativ schwierig zu verstehen. Das liegt zum einen an den vielen Leerzeilen und auskommentierten Code-Stellen, aber auch an der Variablenbenennung: x und r sagen wenig, auch d und i sagen nicht viel aus.

Wäre hier eine einfachere Lösung 🙂
Java:
	public static void main(String[] args) throws IOException
	{
		// Initialisierung
		String[] eingeleseneWorte = new String[3];
		// Einlesen und speichern der Woerter
		eingeleseneWorte = leseWoerterEin(3);
		// Ordnen der Wörter 
		ordneWoerterLexiographisch(eingeleseneWorte);
		
		System.out.println("Lexikografische Ordnung: ");
		for (int i = 0; i < 3; i++)
		{
			System.out.println(i + 1 + ". : " + eingeleseneWorte[i]);
		}
	}

	private static void ordneWoerterLexiographisch(String[] woerter)
	{
		boolean istSortiert = false;
		
		while (!istSortiert)
		{
			istSortiert = true;
			for (int i = 0; i < woerter.length - 1; i++)
			{
				if (woerter[i].compareTo(woerter[i+1]) > 0)
				{
					String buffer = woerter[i];
					woerter[i]  = woerter[i+1];
					woerter[i+1] = buffer;
					istSortiert = false;
				}
			}
		}
	}

	private static String[] leseWoerterEin(int anzahl) throws IOException
	{
		String[] rueckgabe = new String[anzahl];

		BufferedReader input = new BufferedReader(new InputStreamReader(
				System.in));

		for (int i = 0; i < anzahl; i++)
		{
			System.out.print(i + 1 + ". Wort : ");
			rueckgabe[i] = input.readLine();
		}

		return rueckgabe;
	}
 

Neue Themen


Zurück
Oben