Vector Manipulieren.. Wie?

JDownHD

Mitglied
Hallooooo,

ich will Folgendes realisieren:
Ich habe eine plz.txt Datei, welche wie Folgt aussieht:
Hattingen, 45525
Hattingen, 45527
Bochum, 44785
.
.
.
usw.​

Ich möchte nun durch die Eingabe einer Stadt die zugehörigen Postleitzahlen ausgegeben bekommen.
Ich möchte also nicht Hattingen eingeben und die Ausgabe:
Hattingen, 45525
Hattingen, 45527​
erhalten sondern:
45525
45527​

also nur die Plz. Bei meinem bisherigen Code habe ich das Problem, dass ich nicht weiß wie ich die Isolierung von "Hattingen" und "45525" in zwei Vectoren bewerkstelligen soll, bzw. wie ich es sonst lösen sollte???:L Da Fehlt mir die Erfahrung. - Ich kann auch keinen vergleichbaren Code finden.

Nun also mein Code:
Java:
import java.io.*;
import java.util.*;
import javax.swing.*;

class Aufgabe9{
	public static void main(String args[]){
		String stadt = JOptionPane.showInputDialog("Bitte den Stadtnamen eingeben!");
		
		try{
			BufferedReader in = new BufferedReader(new FileReader("plz.txt"));
			Vector<String> v = new Vector<String>();
			String s = "";
			while((s = in.readLine()) != null)
				v.add(s);
			for(int i=0; i<v.size(); i++)
				if(stadt.equals(v.get(i)))
					System.out.println(v.get(i));
			in.close();
		}catch(FileNotFoundException e){
			System.out.println("Datei kann nicht gefunden werden");
		}catch (IOException e){
			e.printStackTrace();
		}
	}
}

Zudem soll eine Meldung ausgegeben werden sobald die Stadt nicht in "plz.txt" vorhanden ist und der Eingabestrom soll korrekt beendet werden.
 

Milo

Bekanntes Mitglied
Hi,

Du musst die einzelnen Zeilen in Deiner Datei zerlegen am Komma. Hier könnte Dir split() weiterhelfen. Diese Methode liefert Dir ein Array, bei dem das erste Element die Stadt und das zweite die Postleizahl ist.

Java:
String plz = "";
while((s = in.readLine()) != null) {
  String[] data = s.split(", "); // oder ein regulärer Ausdruck
  if (data[0].equals(stadt)) {
    plz = data[1];
    break;
  }
}
System.out.println(plz);

Gruß Micha
 
Zuletzt bearbeitet:

JDownHD

Mitglied
Hi,

Du musst die einzelnen Zeilen in Deiner Datei zerlegen am Komma. Hier könnte Dir split() weiterhelfen. Diese Methode liefert Dir ein Array, bei dem das erste Element die Stadt und das zweite die Postleizahl ist.

Java:
String plz = "";
while((s = in.readLine()) != null) {
  String[] data = s.split(", "); // oder ein regulärer Ausdruck
  if (data[0].equals(stadt)) {
    plz = data[1];
    break;
  }
}
System.out.println(plz);

Gruß Micha

SUPER!:toll: FETTES DANKE! So leicht hatte ich es mir nicht Vorgestellt :D Aber die Vectoren waren wohl der falsche Ansatz!
Java:
import java.io.*;
import java.util.*;
import javax.swing.*;

class Aufgabe9{
	public static void main(String args[]){
		String stadt = JOptionPane.showInputDialog("Bitte den Stadtnamen eingeben!");
		
		try{
			BufferedReader in = new BufferedReader(new FileReader("plz.txt"));
			String s = "";
			while((s = in.readLine()) != null){
				String[] data = s.split(", ");
			for(int i=0; i<data.length; i=+2)
				if(data[i].equals(stadt)){
					System.out.println(data[(i+1)]);
					break;
				}else
					System.out.println("Die Stadt konnte nicht gefunden werden!");
					break;
			}
			in.close();
		}catch(FileNotFoundException e){
			System.out.println("Datei kann nicht gefunden werden");
		}catch (IOException e){
			e.printStackTrace();
		}
		
		System.exit(0);
	}
}

Könnte mir einer noch sagen ob der Code so Optimal ist?
Und wofür die "IOException" gut ist:eek:
 
Zuletzt bearbeitet:

langhaar!

Bekanntes Mitglied
Könnte mir einer noch sagen ob der Code so Optimal ist?

Was verstehst du unter Optimal?
Lesbarkeit? Wartbarkeit? Laufzeit?
Eine Software kann eine Vierlzahl von Qualitäten haben, die zum Teil widersprüchlich sind, und nur wenige davon (Laufzeit) können objektiv gemessen werden.

Abgesehen davon ist folgende Stelle Käse:
Java:
for(int i=0; i<data.length; i=+2)
                if(data[i].equals(stadt)){
                    System.out.println(data[(i+1)]);
                    break;
                }else
                    System.out.println("Die Stadt konnte nicht gefunden werden!");
                    break;
            }
Du machst in beiden Zeigen der Bedingung ein break. Das macht rein technisch keinen Sinn. Dann kannst du das break auch nach der Bedingung setzen. Dann brauchst du aber keine Schleife.
Inhaltlich hast du eine Stadt und eine PLZ. Du prüfst die Stadt. Wozu die Schleife? Der richtige Code wurde dir doch bereits gepostet.
 

Spin

Top Contributor
Kurze Anmerkung: BREAK benutzt man nicht!!!!!!!!!!!!!!!!!!!!

Break wird lediglich bei switch statements verwendet und woanders sollten die nicht benutzt werden.
Ich bitte immer
Java:
boolean run = false;
zu benutzen. Also einen boolean, der die Schleife entsprechend beendet.

Ein Break mag in java akzeptable und jeder Java Nutzer weiss das der Break an die richtige Stelle zurückspringt, aber ....das erfordert dem Rechner viel Arbeit!
 

Milo

Bekanntes Mitglied

Bleiglanz

Gesperrter Benutzer
Java:
 System.exit(0);
lange nicht gesehen, woher hast du das denn?

"The System.exit method forces termination of all threads in the Java virtual machine. This is drastic....System.exit should be reserved for a catastrophic error exit, or for cases when a program is intended for use as a utility in a command script that may depend on the program's exit code."
 

Milo

Bekanntes Mitglied
Hi Bleiglanz,

in der Doku klingt das weit weniger dramatisch.

Terminates the currently running Java Virtual Machine. The argument serves as a status code; by convention, a nonzero status code indicates abnormal termination.

Mit dem Argument 0 würde ich also ein reguläres Beenden der Anwendung vermuten.

Gruß Micha
 

Timothy Truckle

Top Contributor
Mit dem Argument 0 würde ich also ein reguläres Beenden der Anwendung vermuten.
Das Problem damit ist, dass sich Methoden, die ein
Code:
System.exit()
einthalten nicht (einfach) testen lassen. Außerdem wird dann gar kein weitere Code des Prorgamms mehr ausgeführt, also beispielsweise werden Temp-Dateien, die mit
Code:
file.deleteOnExit()
gelöscht werden sollten, eben nicht gelöscht. Gleiches gilt für alle
Code:
finally
-Blöcke...

Also wenn schon
Code:
System.exit()
dann ausschließlich am Ende von
Code:
main
!

bye
TT
 

Spin

Top Contributor
Hallo Milo,

entschuldige bitte meine etwas gewollte Aufmerksamkeit.
Ein Break Befehl gehört ist wie ein GOTO Befehl und wenn du dass runterbrichst in C oder Assembla, dann wirst du feststellen dass dass im micorsekunden langsamer ist als ein iteratives Abarbeiten von Programmiercode. Vielleicht ist dass jetzt nicht umbedingt für ein Code der 1000 Zeilen lang ist auschclaggebend und auch nicht für einen Compiler der doch alle solche Dinge versucht zu beschleunigen.

Aber zudem ist das Bad Practise bzw. auch Anti Pattern Break in for Schleifen zu benutzen. Ich habe schon viel Code gesehen der mit Breaks beschütet wurde, und nach spätestens 5 Breaks weisst du nicht mehr wo das Programm hinspringt. Klar mit einem Debugger, aber als Entwickler sollte man sich in die Pflicht nehmen, gleich gut wartbaren Code zu schreiben.

Und schau mal hier - Pipelining.
Das Problem ist für break, continue und goto Befehle in dem Bereich immer wieder Schwirigkeiten bereiten , die die CPU zum brennen bringen ;).

Klar auf dem Java Level hat man nichts mehr mit Maschinencode zu tun :( Auch nichts mehr mit Hardwareimplementierungen.

Als Einsteiger kann man sich auch gleich anschauen was man nicht in Java machen sollte ;)
Anti-Patterns oder doch erst was man mit java so machen kann? mhhhh :bae:

Break wird an einigen Stellen verwendet und das passiert mir auch das eine oder andere mal, aber ein kleines Gefühl dafür zu bekommen es weniger zu verwenden ist schonmal ein guter Ansatz :)
 
F

Firephoenix

Gast
Hallo Milo,

entschuldige bitte meine etwas gewollte Aufmerksamkeit.
Ein Break Befehl gehört ist wie ein GOTO Befehl und wenn du dass runterbrichst in C oder Assembla, dann wirst du feststellen dass dass im micorsekunden langsamer ist als ein iteratives Abarbeiten von Programmiercode. Vielleicht ist dass jetzt nicht umbedingt für ein Code der 1000 Zeilen lang ist auschclaggebend und auch nicht für einen Compiler der doch alle solche Dinge versucht zu beschleunigen.

Aber zudem ist das Bad Practise bzw. auch Anti Pattern Break in for Schleifen zu benutzen. Ich habe schon viel Code gesehen der mit Breaks beschütet wurde, und nach spätestens 5 Breaks weisst du nicht mehr wo das Programm hinspringt. Klar mit einem Debugger, aber als Entwickler sollte man sich in die Pflicht nehmen, gleich gut wartbaren Code zu schreiben.

...

Bei dem Antipattern stimme ich dir teilweise zu, wenn mir allerdings jemand erzählt, dass er etwas benutzt/nicht benutzt weil der Code schneller läuft kann er gleich wieder gehen ;)

Performance sollte niemals ein Diskussionargument sein vor lesbarem Code, optimiert wird erst wenn es nötig ist (oder am Ende des Produktionszyklus), und dann nur an ausgewählten Hotspots.

Die einzige Referenz die ich zu Performanceunterschieden von break / boolean-flags gefunden habe war diese hier: Are break-statements (in Java and .Net) as bad as taught to me? | Division by Zero (die Version mit break dort doppelt so schnell wie der boolean-flag), allerdings würde ich solche Benchmarks auch nicht an die Wand pinnen, da Microbenchmarks fast nie zuverlässig sind und das Ergebnis hier vermutlich sogar von der zugrunde liegenden Hardware abhängen dürfte.

Gruß
 
B

bone2

Gast
Zuletzt bearbeitet von einem Moderator:

JDownHD

Mitglied
@langhaar!
also unter Optimal verstehe ich momentan eigentlich nur ob der Code schlüssig ist, oder ob so Sachen wie das break; weg gelassen werden können. Oder ob das Angesprochene System.exit();.
Ich bin Anfänger und lege noch keinen Wert auf spezifische Laufzeitauswirkungen von verschiedenen Programmiermöglichkeiten. Mich interessiert nur, ob der Code der Norm entspricht und ob man von der Lesbarkeit bzw. der Syntax Sachen verbessern kann oder nicht (z.B. die von dir Angesprochene for-Schleife).

@Spin
Ich habe nicht verstanden was du mit
Java:
boolean run = false;
meinst und wie ich es einsetzen soll.

@Bleiglanz
Java:
 System.exit(0);
habe ich aus unserem Skript :D
Also soll ich es nicht mehr verwenden?

Edit:
Ich habe den Code jetzt abgeändert:
Java:
import java.io.*;
import java.util.*;
import javax.swing.*;

class Aufgabe9{
	public static void main(String args[]){
		String stadt = JOptionPane.showInputDialog("Bitte den Stadtnamen eingeben!");
		
		try{
			BufferedReader in = new BufferedReader(new FileReader("plz.txt"));
			String s = "";
			boolean z = false;
			while((s = in.readLine()) != null){
				String[] data = s.split(", ");
				if(data[0].equals(stadt)){
					System.out.println(data[(1)]);
					z = true;
				}
			}
			if(z==false)
				System.out.println("Die Stadt konnte nicht gefunden werden!");

			in.close();
		}catch(FileNotFoundException e){
			System.out.println("Datei kann nicht gefunden werden");
		}catch (IOException e){
			System.out.println("Es ist ein Fehler beim lesen der Datei aufgetreten");
		}
	}
}

Ich weiß jetzt halt nur nicht ob ich den Eingabestrom korrekt beendet habe, also das von alleine passiert oder ich noch Code einfügen muss.
 
Zuletzt bearbeitet:
B

bone2

Gast
mit boolean statt break meint er so etwas:
Java:
        int i = 1;
        while(1 < 10){
            i++;
            
            if (i == 5) {
                break; // hässich
            }
        }

        boolean run = true;
        i=1;
        while(1 < 10 && run){
            i++;
            
            if (i == 5) {
                run = false; // schön
            }
        }
 

JDownHD

Mitglied
Also bei mir eher schwer zu Implementieren da:
Java:
String s = "";
			boolean z = false;
			boolean run = true;
			while((s = in.readLine()) != null && run){
				String[] data = s.split(", ");
				if(data[0].equals(stadt)){
					System.out.println(data[(1)]);
					z = true;
					run = false;
				}
			}

ich ja mehrere Werte will.
In diesem Fall würde er ja nach einem Treffer aufhören.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Erste Schritte Alle möglichen ausgaben von 5 Zahlen als Vector Java Basics - Anfänger-Themen 7
C Werte im Vector in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 14
C Vector-Inhalt in zufällige Reihenfolge bringen Java Basics - Anfänger-Themen 6
J Compiler-Fehler Fehler bei Vektor (E extends Object declared in class Vector) Java Basics - Anfänger-Themen 9
J Reihenfolge im Vector lässt sich nicht drehen Java Basics - Anfänger-Themen 9
M Klassen Gesamt speicherbare Elemente in Vector? Java Basics - Anfänger-Themen 3
P Vector durchsuchen und Elemente löschen Java Basics - Anfänger-Themen 4
Z Vector in jTextField/jLabel darstellen Java Basics - Anfänger-Themen 4
P Objekte in Vector werden überschrieben Java Basics - Anfänger-Themen 4
P Array in Vector speichern Java Basics - Anfänger-Themen 2
E Methoden new Vector().add(x).add(x); ? Java Basics - Anfänger-Themen 5
F Vector istGeordnet Java Basics - Anfänger-Themen 15
R Vector-Filterfunktion Java Basics - Anfänger-Themen 4
Todesbote Map (Key=String; Value = Vector) Value/Vector sortieren Java Basics - Anfänger-Themen 13
M Vector eines Vectors einzeln ausgeben Java Basics - Anfänger-Themen 9
K String kommt schon in Vector vor? Java Basics - Anfänger-Themen 36
J Erzeugung eines Vector-Objekts - Frage zum Typ Java Basics - Anfänger-Themen 3
H Zugriff auf Vector Element Java Basics - Anfänger-Themen 2
C Vector erzeugt neue Indizes nach Input Java Basics - Anfänger-Themen 2
A Author in Vector Java Basics - Anfänger-Themen 22
M Vector überschreibt Elemente bei add()-Methode Java Basics - Anfänger-Themen 10
T Elemente im Vector werden einfach überschrieben! Java Basics - Anfänger-Themen 3
K Collections Vector zu String casten Java Basics - Anfänger-Themen 4
U Wozu dient ein Vector in Java? Java Basics - Anfänger-Themen 6
S Vector mit beliebigen Klassen an Funktion übergeben Java Basics - Anfänger-Themen 20
B Globale vector? Java Basics - Anfänger-Themen 7
E 2 Dimensionaler Vector Java Basics - Anfänger-Themen 5
T Map<String, Vector>? Java Basics - Anfänger-Themen 11
P Collections Vector füllen in for-Schleife Java Basics - Anfänger-Themen 3
J Vector Addition Java Basics - Anfänger-Themen 5
M 2D Vector Java Basics - Anfänger-Themen 2
N IndexOutOfBoundsException: Source does not fit in dest beim Kopieren von ArrayList in Vector Java Basics - Anfänger-Themen 4
M Umwandlung von Array in Vector und umgekehrt Java Basics - Anfänger-Themen 6
E Datentypen Klasse Vector aus der Standard-API anwenden Java Basics - Anfänger-Themen 7
D Klasse Vector entwerfen Java Basics - Anfänger-Themen 7
A Arrays vs Liste vs Vector Java Basics - Anfänger-Themen 30
H in for Schleife über Vector iterieren Java Basics - Anfänger-Themen 2
S Datentypen Vector auslesen Java Basics - Anfänger-Themen 12
yampi Objektsammlung - Hashtable, Vector, Arrays Java Basics - Anfänger-Themen 8
T Vector-Positin anzeigen Java Basics - Anfänger-Themen 3
C Vector - obsolete collection Java Basics - Anfänger-Themen 1
C Vector<Object> Probleme Java Basics - Anfänger-Themen 38
C Datentypen Probleme mit Vector.contains() Java Basics - Anfänger-Themen 10
M Datentypen function(Vector<SuperClass>), Vector<Subclass> Java Basics - Anfänger-Themen 6
L Vector Sortieren Java Basics - Anfänger-Themen 8
B Vector in Table ersetzen Java Basics - Anfänger-Themen 4
B Werte einer Spalte aus DB in einen Vector schreiben Java Basics - Anfänger-Themen 15
kitz Telefonbuch (Vector) Java Basics - Anfänger-Themen 17
E Arraylist mit Daten aus Vector füllen Java Basics - Anfänger-Themen 7
S Vector -> String JComboBox Java Basics - Anfänger-Themen 11
F Vector wird überschrieben Java Basics - Anfänger-Themen 8
T Vector sortiern Java Basics - Anfänger-Themen 7
C Frage zu Vector und muliplizieren des Inhaltes Java Basics - Anfänger-Themen 2
S Vector von eigenen Klassen Java Basics - Anfänger-Themen 2
J Collection Vector Java Basics - Anfänger-Themen 8
Streeber ArrayList/Vector, mehrdimensional Java Basics - Anfänger-Themen 11
N Was ist der Unterschied zwischen ArrayList und Vector? Java Basics - Anfänger-Themen 3
babel Einen Vector/Liste mit Daten prüfen Java Basics - Anfänger-Themen 31
B Hilfe zum einem Problem mit Vector Java Basics - Anfänger-Themen 8
H Vector - Fehler? Java Basics - Anfänger-Themen 2
babel einen Vector nach Datum sortieren Java Basics - Anfänger-Themen 21
T Array-Vector Problem Java Basics - Anfänger-Themen 18
P Vector und Exception Java Basics - Anfänger-Themen 7
K Vector Java Basics - Anfänger-Themen 3
K Vector Java Basics - Anfänger-Themen 10
babel ein Vector mit verschiedenen Werten auslesen und berechnen Java Basics - Anfänger-Themen 34
T Object aus Vector übergeben Java Basics - Anfänger-Themen 2
B Vector<Point> als Rückgabewert Java Basics - Anfänger-Themen 23
L Vector einem Array hinzufügen Java Basics - Anfänger-Themen 14
P Vector mit double Java Basics - Anfänger-Themen 3
P Vector Elemente auslesen Java Basics - Anfänger-Themen 9
N Anfängerfrage richtige Syntax und Frage zu Vector Java Basics - Anfänger-Themen 7
C Unterschied zwischen ArrayList und Vector Java Basics - Anfänger-Themen 2
W Vector mit String[] auslesen Java Basics - Anfänger-Themen 4
Povlsen84 Initlialisierung, Vector, serialVersionUID . kleine Fragen Java Basics - Anfänger-Themen 4
Q Vector verändert trotz final seine Größe Java Basics - Anfänger-Themen 5
B Dopplete aus Vector entfernen Java Basics - Anfänger-Themen 8
E Vector Fehler bei allen Methoden von Vector Java Basics - Anfänger-Themen 2
K Vector zu Array machen Java Basics - Anfänger-Themen 10
1 JList Problem : Synchronisation mit Vector klappt nicht :( Java Basics - Anfänger-Themen 6
L Multidimensional Vector - Recordset Java Basics - Anfänger-Themen 5
K Objektklasse mit leerem Vector füllen Java Basics - Anfänger-Themen 6
K Vector wird überschrieben Java Basics - Anfänger-Themen 7
G Vector Strijng parsen Java Basics - Anfänger-Themen 6
K vector cannot be resolved Java Basics - Anfänger-Themen 3
G Zeichenkette suchen in Vector-Klasse Java Basics - Anfänger-Themen 11
R fehler beim incrementellen schreiben in einen vector Java Basics - Anfänger-Themen 11
M ObjectInputStream, Object und Vector<Object> Java Basics - Anfänger-Themen 4
G Vector, equal & Casts Java Basics - Anfänger-Themen 5
N Objekte in einen Vector packen oder nicht? Java Basics - Anfänger-Themen 3
D Frage zu Vector Java Basics - Anfänger-Themen 7
S Problem mit Vector Java Basics - Anfänger-Themen 2
G Object[] [] nach vector casten. Java Basics - Anfänger-Themen 3
G 2D vector zugriff auf elementinterne elemente wie Java Basics - Anfänger-Themen 3
G vector in neuem vector sortieren Java Basics - Anfänger-Themen 3
G jede 2te zeile in vector leer einfügen, wie? Java Basics - Anfänger-Themen 4
G vector füllt sich immer weiter. wo muss ich ihn leeren? Java Basics - Anfänger-Themen 3
V Vector/Arraylist hat nur gleiche Einträge Java Basics - Anfänger-Themen 3
G Vector eigenen Typs mit Daten füllen Java Basics - Anfänger-Themen 20
H Vector und Dateien Java Basics - Anfänger-Themen 27

Ähnliche Java Themen

Neue Themen


Oben