Programm zum Buchstaben austauschen, logikproblem

javaEule

Mitglied
Hallo Leute,
Ich habe ein Programm geschrieben, dass die Buchstaben meiner ersten Eingabe mit denen der zweiten Eingabe in allen weiteren Eingaben vertauscht.
Bsp.:
Eingabe: oki lim ikoneas sagt ok zu limes
Ausgabe: milneas sagt li zu lmmes
(die Eingabe gibt keinen Sinn aber ist hier ja egal)

Problem:
momentan wird noch
"mmlneas sagt lm zu lmmes"
ausgegeben. Also das "k" wird erst zu "i" und dann zu "m", es soll aber nur einmal ausgetauscht werden.
Außerdem darf ich weder "replace" noch character arrays verwenden.

Hier mein Code:
Java:
import java.lang.Object;
public class Hexe33
{
	public static void main(String[]args)
	{
		// für alle args ab Stelle 2
		for(int i = 2;i<args.length;i++)
		{
			
			String newWord = args[i];
			// counter wird erhöht, damit letterChanger weis, welche Stelle von lettersToChange1/2 er betrachten soll.
			for(int counter = 0;counter<args[0].length();counter++)
			{
				// newWord sammelt nach jedem Durchlauf von letterChanger das Ergebnis, damit es für den nächsten Durchlauf verfügbar ist. 
				newWord = letterChanger(newWord,args[0],args[1],counter);
				
				// setzt counter auf die Abbruchbedingung der for-Schleife, wenn ein Austausch stattgefunden hat und verhindert so, dass doppelt getauscht wird.
				if(testIfChanged(newWord,args[0],args[1],counter) == true)
				{
					counter = args[0].length();
				}
			}

			System.out.print(newWord + " ");
		}			
	}
	//letterChanger ersetzt in wordToChange die Buchstaben von lettersToChange1 durch die Buchstaben von lettersToChange2
	public static String letterChanger (String wordToChange, String lettersToChange1, String lettersToChange2, int counter)
	{
		String newWord = "";
		for(int i = 0;i<wordToChange.length();i++)
		{
	
			if(wordToChange.charAt(i) == lettersToChange1.charAt(counter))
			{
				newWord = newWord + lettersToChange2.charAt(counter);
			}
			else
			{
				newWord = newWord + wordToChange.charAt(i);
			}
		}
		return newWord;
	}

	// testIfChangeg gibt true zurück wenn ein buchstabe ausgetauscht wurde, false wenn nicht.
	public static boolean testIfChanged (String wordToChange, String lettersToChange1, String lettersToChange2, int counter)
	{
		boolean result = false;
		for(int i = 0;i<wordToChange.length();i++)
		{
			if(wordToChange.charAt(i) == lettersToChange1.charAt(counter))
			{
				result = true;
			}
			else
			{
				continue;
			}
			
		}
		return result;	
	}
}
 
du hast vereinfacht zwei Regeln
k -> i
i -> m
und ein Wort "aaak"
im Moment nimmst du die erste Regel, durchläufst das Wort -> "aaai",
dann die zweite Regel, durchläufst das geänderte Wort "aaai" -> aaam"

drehe die Verarbeitung um:
durchlaufe das Wort "aaak" nur genau einmal, und für jedes Zeichen prüfst du nacheinander alle Regeln, höchstens eine wird zutreffen,
der geänderte char ist dann final, nie wieder wirst du das aktuelle Zeichen aus dem Wort erneut prüfen

das ist übrigens auch ökonomischer, dann baust du nicht so oft den String neu zusammen (nur noch einmal)

-----

so, das was bewußt allgemein nur die Idee,
wenn du es so umsetzen willst darfst du ruhig überlegen wie das geht, nicht gleich nach Code fragen 😉
(in unfairer Annahme einer entsprechenden Folgeantwort)
 

Neue Themen


Zurück
Oben