Kürzen des Quelltextextes

Status
Nicht offen für weitere Antworten.

EProX

Mitglied
Ich schreibe derzeitig an einem Programm, bei dem man zuerst das Land auswählt, dann das Geschlecht und dann den Anfangsbuchstaben.

Danach drückt man auf Suchen und das Programm gibt, wenn man zum Beispiel das Land Garethien, das Gechlecht männlich und den Buchstaben B ausgewählt
hat, alle männlichen Namen in diesem Ort aus.



Das Problem
Ich habe erst kürzlich mit Java oder überhaupt mit Programmmieren angefangen und weiß nicht, wie ich hier den deutlich Quelltext kürzer gestalten könnte, denn für das Spiel, für welches ich dieses Programm schreibe hat über 20 Länder und der Quelltext ist jetzt schon nach vier Ländern schon über 3000 Zeilen lang ist. Ich habe das Programm mit If-Bedingungen gemacht. Wenn das hilft for-Schleifen kann ich auch, aber nur bissel.

Code:
//A
if (Orte.equals("Garethi (zentrales Mittelreich und allgemein)")){
    if (Alphabet.equals("A")){
        if (radMann.isSelected()){
            txtAusgabe.setText("Adran, Alrik, Angrond, " +
                    "Anjun, Answin, Ardor, Arn");
        }
    }
}

if (Orte.equals("Garethi (zentrales Mittelreich und allgemein)")){
    if (Alphabet.equals("A")){
        if (radFrau.isSelected()){
            txtAusgabe.setText("Adaque, Alda, Aldare, Alena, Alinde, " +
                    "Alrike, Alruna, Alvide, Arba, Ardare, Ayla");
        }
    }
}

//B
if (Orte.equals("Garethi (zentrales Mittelreich und allgemein)")){
    if (Alphabet.equals("B")){
        if (radMann.isSelected()){
            txtAusgabe.setText("Badilak, Baltram, Bardo, Berman, " +
                    "Bernhelm, Bogumil, Boromil, Boronian, Bosper, " +
                    "Brin, Burgol, Burian");
        }
    }
}

if (Orte.equals("Garethi (zentrales Mittelreich und allgemein)")){
    if (Alphabet.equals("B")){
        if (radFrau.isSelected()){
            txtAusgabe.setText("Belona, Bernika, Binya, Birsel, " +
                    "Boriane, Boroniane");
        }
    }
}
 
Zuletzt bearbeitet:

Michael...

Top Contributor
Kürzen könnte man das z.B. mal so:
Java:
if (Orte.equals("Garethi (zentrales Mittelreich und allgemein)")){
    if (Alphabet.equals("A")){
        if (radMann.isSelected()){
            txtAusgabe.setText("Adran, Alrik, Angrond, " +
                    "Anjun, Answin, Ardor, Arn");
        }
        else if (radFrau.isSelected()){
            txtAusgabe.setText("Adaque, Alda, Aldare, Alena, Alinde, " +
                    "Alrike, Alruna, Alvide, Arba, Ardare, Ayla");
        }
    }
    else if (Alphabet.equals("B")){
        if (radMann.isSelected()){
            txtAusgabe.setText("Badilak, Baltram, Bardo, Berman, " +
                    "Bernhelm, Bogumil, Boromil, Boronian, Bosper, " +
                    "Brin, Burgol, Burian");
        }
        else if (radFrau.isSelected()){
            txtAusgabe.setText("Belona, Bernika, Binya, Birsel, " +
                    "Boriane, Boroniane");
        }
    }
}
Hab's aber nicht überprüft.
Bei komplexeren Kombinationsmöglichkeiten gehe ich manchmal so vor, dass ich mir anhand der einzelnen Selektionen eine eindeutige Zahl errechne und dann mit dieser die Fallunterscheidung mache.

Allerdings bei 20 Ländern, männlich/weiblich, A-Z komme ich auf 1040 Möglichkeiten - viel Spass damit ;-)
 

FatFire

Bekanntes Mitglied
Solche Daten haben eigentlich nichts im Quelltext zu suchen. Also entweder in eine Datenbank packen und dann auslesen oder in eine Datei schreiben und mit Deinem Programm auslesen. So kannst Du auch im Nachhinein schnell Änderungen vornehmen ohne den Quellcode anzupacken. Generell sollten Daten immer getrennt von Logik und Darstellung gehalten werden (MVC-Prinzip). So ist das Programm leichter erweiterbar und die Darstellung auch besser anzupassen.

Der Einsatz einer Datenbank mag zwar übertrieben wirken, aber so wie ich das sehe ist das ja auch nichts anderes als eine Datenbank, was Du da schreiben möchtest. Also schreib doch einfach nur ein Frontend zu einer solchen.

Gruß FatFire
 

Landei

Top Contributor
Aaaaaaaaaaaaaaaaaaaaargh!
Meinst du das im Ernst? Wie willst du da was ändern, ohne neu zu compilieren?

Solche Daten gehören niemals in den Quelltext. Falls du keine Datenbank hast, würde ich dir zu einer XML-Datei raten, die etwa so aufgebaut ist:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<names>
  <place>"Garethi (zentrales Mittelreich und allgemein)"</place>
     <male>Adran, Alrik, Angrond,Anjun, Answin, Ardor, Arn,Badilak, Baltram, Bardo, Berman,Bernhelm,Bogumil,Boromil, Boronian, Bosper,Brin, Burgol, Burian</male>
     <female>Adaque, Alda, Aldare, Alena, Alinde,Alrike, Alruna, Alvide, Arba, Ardare, Ayla,Belona, Bernika, Binya, Birsel,Boriane, Boroniane</female>
  </place>
   ...
</names>

Wenn du das hast, kannst du die Daten mit einer der zahlreichen Methoden (SAX, DOM, JAXB...) einlesen. Das Splitten in die einzelnen Namen und das Filtern nach Anfangsbuchstaben kann dein Programm machen.

Oder du bist ganz ordentlich und fleißig und spendierst jedem Namen einen eigenen Eintrag:
Code:
<?xml version="1.0" encoding="UTF-8"?>
<names>
  <place>"Garethi (zentrales Mittelreich und allgemein)"</place>
     <male>Adran</male>
     <male>Alrik</male>
      ...
     <female>Adaque</female>
     <female>Alda</female>
     ... 
  </place>
   ...
</names>
 
B

bygones

Gast
naja viel gespart ist damit nicht.

nutz eine Datenbank... auch wenn ich mal davon ausgeh du hast noch nie eine eingesetzt.

eine ziemliche quick&dirty loesung.

schreib dir ein Properties file das in etwa folgende Struktur hat
Code:
// aufbau: STADT.BUCHSTABE.GESCHLECHT
Garethi.A.Mann = Ar,At,As
Garethi.B.Mann = Bu,Ba,Bs
Garethi.A.Frau = Ass,Art
// und alle anderen

in einem programm liest du einmal die Properties datei ein

Code:
Properties properties = new Properties();
properties.load(new FileInputStream("test.properties"));

und kannst dir dann eine methode fuer alles erstellen
Code:
public void setText(String ort, String alphabet, boolean isMann) {
   String gender = isMann ? "Mann" : "Frau";
   txtAusgabe.setText(properties.getProperty(ort + "." + alphabet + "." + gender));
}

nicht schoen... aber n schneller workaround

@Landei
XML geht natuerlich auch - auch wenn dein XML nicht korrekt ist ;-) (places schliesst einmal zu oft)..

nehm groovy - da geht das dann auch schneller und einfacher :D
 
Zuletzt bearbeitet von einem Moderator:

Quaxli

Top Contributor
Teilweise würde es für einen Anfänger auch eine einfache Textdatei tun - muß nicht immer gleich XML sein.
Für kleinere Geschichten könnte man vielleicht noch mit enums arbeiten, etwa so:

Java:
public class Test1 {

  enum Ort {Garethi,Hugonien,Kasparshausen,etc};
  enum Geschlecht {Mann,Frau};

	
	public static void main(String[] args){
		new Test1();
	}
	
	public Test1(){
		
		System.out.println("--------einzelnes Element----------------------");
		Ort ort1 = Ort.Garethi;
		System.out.println(ort1);
		
		System.out.println("--------Vergleich----------------------");
		if(ort1.toString().equals("Garethi")){
			System.out.println("Treffer");
		}
		
		System.out.println("---------alle ausgeben---------------------");
	  Ort[] alle = Ort.values();
	  for(int i=0;i<alle.length;i++){
	  	System.out.println(alle[i]);
	  }
		System.out.println("------------------------------");
		
		
	}
	
}

Für komplexe Geschichten, wie Du sie offensichtlich vor hast, wirst Du um eine vernünftige Datenbank-Lösung (wie schon oben vorgeschlagen) nicht herum kommen, da Du ja vermutlich noch einiges mehr irgendwie ablegen mußt.
 

EProX

Mitglied
Ok danke an alle für eure raschen Antworten. Ich überleg mir mal am Wochenende, wie ich es nun mache. Mit Datenbanken habe ich noch nie was gemacht, aber XML sieht recht leicht aus.
 
Zuletzt bearbeitet:
B

bygones

Gast
Ok danke an alle für eure raschen Antworten. Ich überleg mir mal am Wochenende, wie ich es nun mache. Mit Datenbanken habe ich noch nie was gemacht, aber XML sieht recht leicht aus.
XML ist auch leicht... das Parsen in Java ist nur ne Qual... *hust*groovy*hust*
 

FatFire

Bekanntes Mitglied
Also ich würde nach wie vor die Datenbankvariante favorisieren. Er könnte dynamisch das Select-Statement basteln (Stadt, M/W, Anfangsbuchstabe) und hätte dann mit der Sucherei nichts mehr am Hut. Alles in XML? Boah, da wird die Performance spätestens beim Suchen doch arg leiden. Auch wenn er Sax nimmt.
SQLite oder gar die JavaDB (mit der ich sonderbarerweise noch nie was gemacht habe) und dann ist das doch gar nicht so viel Aufwand.

Gruß FatFire
 

Noctarius

Top Contributor
Wieso soltle die Geschindigkeit in den Keller gehen? Sauberes Klassenmodell und beim Starten die Daten laden. Datenbanken hast du immer das Problem (bei Richtigen), dass du einen Server brauchst. Außer du nimmst halt Systeme wie SQLite oder JavaDB oder HSQL, ...

Ich persönlich finde die XML Variante auch am sinnvollsten und schnellsten. Nicht zuletzt ist das Einpflegen mit gutem Editor sehr angenehm.
 

FatFire

Bekanntes Mitglied
Sauberes Klassenmodell...
Naja, vielleicht hat es da bei mir bisher immer gehakt :D

Und einen kostenlosen, guten XML-Editor wo man mal fix Daten eingeben kann (ohne auch die ganzen Tags zu setzen), hab ich bisher auch noch nicht gefunden (ja gut, Testversion von Altova XMLSpy, aber das ist ja nur eine Testversion).

Aber da ich sowieso recht wenig mit XML gemacht habe, zieh ich mich vielleicht an dieser Stelle auch besser aus der Diskussion zurück.

Gruß FatFire

PS: Wünsche trotzdem viel Glück bei der Auswahl der richtigen Alternative. Das es so nicht bleiben kann wie es ist, da sind wir uns ja schon einmal einig.
 
S

Spacerat

Gast
Überflüssigen Text (z.B. Quelltext oder Texte wie meinen Beitrag hier) kürzt man am besten mit einer Serie von Tasten bzw. Tastenkombinationen:
"Pos1", "Umschalt Ende", "Entf"...
Aber mal Spass beiseite... Ich plädiere auch mal für XML.
Natürlich kann man sich auch eigene Datenstrukturen entwickeln und diese dann mit einem Tokenizer aufschlüsseln. Wieso also nicht auf etwas vorhandenes, das ungefähr so verfährt, zurückgreifen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
thefastandcurious Brüche kürzen Java Basics - Anfänger-Themen 70
H Zahlen kürzen Java Basics - Anfänger-Themen 2
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
J Dezimalzahl in Bruch Umwandeln und Kürzen Java Basics - Anfänger-Themen 8
G Code kürzen Java Basics - Anfänger-Themen 5
G code kürzen Java Basics - Anfänger-Themen 16
F String auf E-Mail kürzen Java Basics - Anfänger-Themen 11
Kirby.exe Brüche kürzen Java Basics - Anfänger-Themen 12
F Code kürzen Java Basics - Anfänger-Themen 9
E Methoden Math.Random() kürzen ? Java Basics - Anfänger-Themen 2
J Code kürzen Java Basics - Anfänger-Themen 11
E Arrayeintrag nach Index löschen und Array kürzen Java Basics - Anfänger-Themen 3
E String komprimieren - Kürzen ohne Informationsverlust? Java Basics - Anfänger-Themen 13
A String kürzen Java Basics - Anfänger-Themen 12
J Brüche kürzen Java Basics - Anfänger-Themen 11
K taschenrechner - Fehler beim Kürzen eines Bruches finden Java Basics - Anfänger-Themen 20
J kürzen von brüchen Java Basics - Anfänger-Themen 9
B Brüche kürzen Java Basics - Anfänger-Themen 7
N Datentypen Double nach 2 stellen kürzen Java Basics - Anfänger-Themen 4
D String kürzen, nich abschneiden Java Basics - Anfänger-Themen 9
M Text kürzen Java Basics - Anfänger-Themen 7
M Quelltext kürzen Java Basics - Anfänger-Themen 8
E Interface einfügen und Code kürzen Java Basics - Anfänger-Themen 15
M Programmierung kürzen??? Java Basics - Anfänger-Themen 5
S [HILFE] Brüche addieren, multiplizieren, kürzen Java Basics - Anfänger-Themen 17
U Code kürzen Java Basics - Anfänger-Themen 4
G bruch soweit es geht kürzen Java Basics - Anfänger-Themen 12
A String um 1 Zeichen kürzen ? Java Basics - Anfänger-Themen 6
S String kürzen auf bestimmte Länge Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben