Integer wird falsch in Datei geschrieben

1

12f6we448

Gast
Hi Leute,
ich möchte mir eine Kundenkartei anlegen.

D.h. Name, Adresse und Telefonnummer werden über die Konsole eingegeben (String) und in einer .txt gespeichert.
Die Kundennummer wird automatisch generiert.

Allerdings wird die Kundennummer (Integer) nicht richtig in die Dartei geschrieben. Aber warum?

Eingabe:
testname
01905666666
testadresse 88

In der Datei steht:

testname
01905666666
testadresse 88

Da wo das komische Zeichen steht müsste die Kundennummer (in diesem Fall die 1 stehen).

Hier mein Code:
Java:
package paket;

import java.io.*;

class Kunde {

	public static String getName() {
		return name;
	}

	public static void setName(String name) {
		Kunde.name = name;
	}

	public static String getTelefonnummer() {
		return telefonnummer;
	}

	public static void setTelefonnummer(String telefonnummer) {
		Kunde.telefonnummer = telefonnummer;
	}

	public static String getAdresse() {
		return adresse;
	}

	public static void setAdresse(String adresse) {
		Kunde.adresse = adresse;
	}

	public static int getKundennummer() {
		return kundennummer;
	}

	public static void setKundennummer(int kundennummer) {
		Kunde.kundennummer = kundennummer;
	}

	private static String name;
	private static String telefonnummer;
	private static String adresse;
	private static int kundennummer = 1;

	public Kunde(String kname, String ktelefonnummer, String kadresse, int kkundennummer) {
		name = kname;
		telefonnummer = ktelefonnummer;
		adresse = kadresse;
		kundennummer = kkundennummer;
	}
	
	public static int vergebeKundennummer() {
		kundennummer ++;		
		return kundennummer;
	}
}

public class Kundenverwaltung {
	
	public static String stringEingabe() {
		
		String strInput = null;

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		try {
			strInput = br.readLine();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return strInput;
		
	}
	
	public static Kunde kundeAnlegen () {
		System.out.print("Name:          ");
		String name = stringEingabe();
		System.out.print("Telefonnummer: ");
		String telefonnummer = stringEingabe();
		System.out.print("Adresse:       ");
		String adresse = stringEingabe();
		int kundennummer = Kunde.vergebeKundennummer();
		
		Kunde neuerKunde = new Kunde(name, adresse, telefonnummer, kundennummer);
		
		return neuerKunde;
	}
	
	public static void schreibeInDatei() throws IOException {
		FileWriter writer;
		File file;
		
		try {
			file = new File("Kundenkartei.txt");
			writer = new FileWriter(file, true);
			writer.write(Kunde.getKundennummer());
			writer.write(System.getProperty("line.separator"));
			writer.write(Kunde.getName());
			writer.write(System.getProperty("line.separator"));
			writer.write(Kunde.getAdresse());
			writer.write(System.getProperty("line.separator"));
			writer.write(Kunde.getTelefonnummer());
			writer.write(System.getProperty("line.separator"));
			writer.write(System.getProperty("line.separator"));
			writer.flush();
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
	}

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

		while (true) {
			System.out.println("[1] Kunde anlegen und Kundendaten speichern");
			System.out.println("[2] Kundendaten auslesen");
			System.out.println("[3] Kundendaten verändern");
			System.out.println("[4] Kunde löschen");
			System.out.println("[0] Programm beenden");
			System.out.print("Bitte wählen Sie die Operation aus: ");
			
			String strInput = null;
			int operation = 0;

			BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
			try {
				strInput = br.readLine();
			} catch (IOException e) {
				e.printStackTrace();
			}

			operation = Integer.parseInt(strInput);
			
			switch (operation) {
			case 0: System.exit(0);
					break;
			case 1:	kundeAnlegen();
					schreibeInDatei();
					break;
			case 2:	
					break;
			case 3:	
					break;
			case 4: 
					break;
			default:	break;			
			}
		}
	}
}

Ich hoffe ihr könnt mir helfen.
DANKE!
 

Simon_Flagg

Bekanntes Mitglied
schau dir mal die doku zu filewriter an, da gibts zwar eine methode write(int), aber die schreibt das zeichen, dessen asci wert du übergibst --> schreibe write(Kunde.getKundenNummer() + ""); --> du wandelst den int in string um --> den er dann ausgibt

lg
 

nrg

Top Contributor
der unterschied zwischen statisch und nicht-statisch ist dir bewusst? jetzt mal abgesehn von der datei ausgabe, hat ein programm einige andere gravierende konzeptionsfehler
 
1

12f6we448

Gast
schau dir mal die doku zu filewriter an, da gibts zwar eine methode write(int), aber die schreibt das zeichen, dessen asci wert du übergibst --> schreibe write(Kunde.getKundenNummer() + ""); --> du wandelst den int in string um --> den er dann ausgibt

lg

Wie kann ich denn den int-Wert in eine Datei schreiben?

nrg hat gesagt.:
der unterschied zwischen statisch und nicht-statisch ist dir bewusst? jetzt mal abgesehn von der datei ausgabe, hat ein programm einige andere gravierende konzeptionsfehler

lg

ich denke mal du willst auf die getter und setter methoden anspielen, oder?
static methoden werden beim aufrufen der klasse geladen
lasse ich das static weg, meckert der compiler.
"Cannot make a static reference to the non-static method getAdresse() from the type Kunde"
 

Final_Striker

Top Contributor
Lege mal einfach in deiner main-Methode zwei unterschiedliche Kundenobjekte an und gib ihre Eigenschaften aus. Dann wirst du sehen wo dein Fehler liegt.
 

Simon_Flagg

Bekanntes Mitglied
int wert schreiben hab ich dir gerade aufgeschrieben write (Kunde.getKundenNummer() + "");

und ich glaube du hast das mit static noch nicht ganz verstanden, hat sich wie eine auswendig gelernte erklärung angeschaut...

wenn eine methode static ist, dann gibt es sie pro klasse nur 1x, die gehört zur klasse, du kannst mit Klassenname.methodenname() auf sie zugreifen

ist die methode jedoch nicht static, dann gehört sie zum objekt, jedes objekt hat eine, auf die kannst du mit objektname.methodenname() zugreifen, dieses objekt musst du aber vorher mit new erzeugen:
Klassenname objektname = new Klassenname();

dann kannst du die methode aufrufen.

deine kundenkartei ist imho falsch konzeptioniert, als sie nur EINEN kunden haben kann. --> du musst alle methode etc. auf non-static setzen (static weglassen) und pro kunde ein objekt erzeugen

außerdem würde ich den methoden eingabe und infileschreiben ein objekt mitgeben, in das /von dem sie ihre daten schreiben/bekommen

lg
 
1

12f6we448

Gast
OK, also nochmal von vorne.
So sieht es momentan aus.

Java:
package paket;

import java.io.*;

class Kunde2 {
	
	public int getKundennummer() {
		return kundennummer;
	}

	public void setKundennummer(int kundennummer) {
		this.kundennummer = kundennummer;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getTelefonnummer() {
		return telefonnummer;
	}

	public void setTelefonnummer(String telefonnummer) {
		this.telefonnummer = telefonnummer;
	}

	public String getAdresse() {
		return adresse;
	}

	public void setAdresse(String adresse) {
		this.adresse = adresse;
	}

	private int kundennummer = 1;
	private String name, telefonnummer, adresse;
	
	public Kunde2 (int kKundennummer, String kName, String kTelefonnummer, String kAdresse) {
		kundennummer = kKundennummer;
		name = kName;
		telefonnummer = kTelefonnummer;
		adresse = kAdresse;
	}
	
	public String stringEingabe() {
				
		String strInput = null;
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		try {
			strInput = br.readLine();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return strInput;
		
	}
	
	public int vergebeKundennummer() {
		kundennummer ++;		
		return kundennummer;
	}
	
}

public class Kundenverwaltung2 {

	public static void main(String[] args) throws IOException {
		
		System.out.print("Name:         ");
		System.out.print("Adresse:      ");
		System.out.print("Telfonnummer: ");
		
	}
}

Wie kann ich nun in der main-Methode ein neues Objekt (Kunde2) erzeugen, dessen Atribute per Tastatureingabe in der Konsole eingelesen werden sollen?

Mit
Java:
Kunde2 neuerKunde = new Kunde2 (Kunde2.vergebeKundennummer(), Kunde2.stringEingabe(), Kunde2.stringEingabe(), Kunde2.stringEingabe());
wäre es ja möglich, aber dann müssten alle Methoden und Variablen ja wieder als static initialisiert werden.

Wie sieht die Alternative aus?
 

jonius

Aktives Mitglied
Wenn es um das Speichern von Wertepaaren wie in deinem Fall geht, bietet sich auch die Klasse Properties an:
Referenz: java.util.Properties
Sie speichert sehr einfach Wertepaare. Allerdings als Strings. Da müsstest du auch Integer und Strings ineinander umwandeln:
String zu int: Integer.parseInt(String xyz)
int zu String: Integer.toString(int xyz)
 

jonius

Aktives Mitglied
Das ganze könnte so aussehen:
Java:
package paket;
 
import java.io.*;
 
class Kunde2 {
    
    public int getKundennummer() {
        return kundennummer;
    }
 
    public void setKundennummer(int kundennummer) {
        this.kundennummer = kundennummer;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getTelefonnummer() {
        return telefonnummer;
    }
 
    public void setTelefonnummer(String telefonnummer) {
        this.telefonnummer = telefonnummer;
    }
 
    public String getAdresse() {
        return adresse;
    }
 
    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }
    // diese statische Variable ist unabhängig von den einzelnen Kundenobjekten. Sie existiert also genau einmal.
    private static int kundenzaehler=1; 

    // diese nichtstatische Variable gehört jeweils zu einem Objekt Kunde2
    private int kundennummer;
    private String name, telefonnummer, adresse;

// das hier ist schlecht    
//    public Kunde2 () {
//        kundennummer = Kunde2.vergebeKundennummer;
//        name = Kundenverwaltung2.stringEingabe("Name");
//        telefonnummer = Kundenverwaltung2.stringEingabe("Telefonnummer");
//        adresse = Kundenverwaltung2.stringEingabe("Adresse");
//    }
    public void gibEigenschaftenAus() {
        System.out.print("Name:         "+getName());
        System.out.print("Adresse:      "+getAdresse());
        System.out.print("Telfonnummer: "+getTelefonnummer()); 
        System.out.print("Kundennummer: "+getKundennummer());
    }

    public void schreibeInDatei() throws IOException {
        FileWriter writer;
        File file;
        
        try {
            file = new File("Kundenkartei.txt");
            writer = new FileWriter(file, true);
            writer.write(Integer.toString(Kunde.getKundennummer()));
            writer.write(System.getProperty("line.separator"));
            writer.write(Kunde.getName());
            writer.write(System.getProperty("line.separator"));
            writer.write(Kunde.getAdresse());
            writer.write(System.getProperty("line.separator"));
            writer.write(Kunde.getTelefonnummer());
            writer.write(System.getProperty("line.separator"));
            writer.write(System.getProperty("line.separator"));
            writer.flush();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

    // Die aktuelle Kundennummer wird zurückgegeben und dann wird der Zaehler eins hoch gesetzt
    public static int vergebeKundennummer() {       
        return kundenzaehler++;
    }
    
}
 
public class Kundenverwaltung2 {
 
    public static void main(String[] args) throws IOException {
        Kunde2 kunde=erstelleKunde();
        kunde.gibEigenschaftenAus();
    }
    public static Kunde2 erstelleKunde() {
        Kunde2 kunde=new Kunde2();
        kunde.setKundennummer(Kunde2.vergebeKundennummer);
        kunde.setName(Kundenverwaltung2.stringEingabe("Name"));
        kunde.setTelefonnummer(Kundenverwaltung2.stringEingabe("Telefonnummer"));
        kunde.setAdresse(Kundenverwaltung2.stringEingabe("Adresse"));
        return kunde;
    }
    public static String stringEingabe(String ausgabe) {
        System.out.print(ausgabe+": ");       
        String strInput = null;
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        try {
            strInput = br.readLine();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
        return strInput;
        
    }
}
Ich habe das im Forum geschrieben und bin mir nicht sicher, ob Fehler drin sind. Aber ich hoffe, die Verwendung von statisch und nicht-statisch, sowie des Konstruktors wird klar.
In deinem Beispielen wurde entweder eine statische Kundennummer verwendet, was zur Folge hätte, dass alle immer die gleiche Nummer haben, oder du hast versucht, eine Kundennummer zu vergeben, die abhängig war von sich selbst.
 
Zuletzt bearbeitet:

Final_Striker

Top Contributor
Java:
    public Kunde2 () {
        kundennummer = Kunde2.vergebeKundennummer;
        name = Kundenverwaltung2.stringEingabe("Name");
        telefonnummer = Kundenverwaltung2.stringEingabe("Telefonnummer");
        adresse = Kundenverwaltung2.stringEingabe("Adresse");
    }

Ein Kunde weiß nicht von einer Kundenverwaltung. Aus diesem Grund ist sowas ein sehr, sehr, sehr schlechter Programmierstil.

Die Eingabe gehört in die Kundenverwaltung. Dort wird aus den Eingaben des User eine neues Kundenobjekt erstellt.
 

jonius

Aktives Mitglied
Ich habe den Code etwas verbessert. Natürlich könnte man auch einen Konstruktor verwenden, der die wichtigsten Informationen erwartet, um sicher zu gehen, dass diese auch wirklich initialisiert werden. Aber es ging ja auch nur um das Grundsätzlich mit dem Statischen und nicht-Statischen. Außerdem könnte man das Kundenzählen der Kundenverwaltung überlassen. Am Besten hätte man ein Objekt Kundenverwaltung, dass die Kunden und die Kundenanzahl verwaltet und Nummer vergibt...

An 12f6we448: Ich hoffe, dein Problem ist damit gelöst.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
D Map<String, Integer> sortieren und der reinfolge nach die Glieder abfragen Java Basics - Anfänger-Themen 3
MoxMorris Integer.MAX_VALUE und Double.MAX_VALUE Unterschied Java Basics - Anfänger-Themen 3
Jul1n4tor Scanner error bei Eingabe die kein Integer ist Java Basics - Anfänger-Themen 4
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
volcanos Addition -> List<Integer> mit Arrays.asList() versus List<Integer>ArrayList<>() Java Basics - Anfänger-Themen 14
JavaBeginner22 Integer in String umwandeln Java Basics - Anfänger-Themen 7
sserio printf integer formatting Java Basics - Anfänger-Themen 17
M Unterschied Integer.toString(x) und x.toString() Java Basics - Anfänger-Themen 22
H Uhrzeitespanne in Integer Wert umrechnen Java Basics - Anfänger-Themen 1
T Java Integer multiplizieren Java Basics - Anfänger-Themen 6
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
D Methoden Plathhalter für Integer in einer Methode Java Basics - Anfänger-Themen 19
StevenGG Java swing "New Integer" Java Basics - Anfänger-Themen 5
C Integer in Vierer-Zahlblöcke aufteilen Java Basics - Anfänger-Themen 11
L integer Java Basics - Anfänger-Themen 6
Zeppi Integer umschreiben Java Basics - Anfänger-Themen 5
rafi072001 Integer Anomalie Java Java Basics - Anfänger-Themen 7
Eule25 Arbeit mit long und int, Error: integer number too large Java Basics - Anfänger-Themen 2
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
D Fibonacci overflow integer Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
V int zu Integer und String Java Basics - Anfänger-Themen 6
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
K String in Integer umwandeln Java Basics - Anfänger-Themen 4
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
J Methoden Moving a n integer matrix Java Basics - Anfänger-Themen 3
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
CptK Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
L String in Integer umwandeln Java Basics - Anfänger-Themen 3
K Datentypen String zu Integer parsen Java Basics - Anfänger-Themen 2
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
S Integer aus Array filtern Java Basics - Anfänger-Themen 4
F Referenzvariable vom Typ "Integer" definieren. (Klausuraufgabe) Java Basics - Anfänger-Themen 5
M set Integer bzw. set null mit SQL DB Java Basics - Anfänger-Themen 9
H Bubblesort-Zwei Integer auf Dekade vergleichen. Java Basics - Anfänger-Themen 6
B Variablen integer im Array Java Basics - Anfänger-Themen 5
C Liste o.ä. erstellen mit <Integer, <Integer, String> Java Basics - Anfänger-Themen 7
R Kompletten String umwandeln in Integer Java Basics - Anfänger-Themen 10
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Orkanson Datentypen Integer in String umwandeln/hinzufügen Java Basics - Anfänger-Themen 3
O Datentypen Integer mit führender Null Java Basics - Anfänger-Themen 13
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
D Fehler: String zu Integer Java Basics - Anfänger-Themen 7
L (Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung) Java Basics - Anfänger-Themen 8
b1ck Integer initialisieren bei do-while-Schleife Java Basics - Anfänger-Themen 11
E Integer und Array übergeben Java Basics - Anfänger-Themen 9
W Fehler bei Integer.parseInt() Java Basics - Anfänger-Themen 4
R String in Integer Java Basics - Anfänger-Themen 11
D Komischer Fehler nach <Integer> List Java Basics - Anfänger-Themen 2
J Integer in Array einlesen Java Basics - Anfänger-Themen 14
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
H Integer in Datei schreiben Java Basics - Anfänger-Themen 2
B OOP Cannot instantiate the type AuDList<Integer> Java Basics - Anfänger-Themen 18
3 ArrayList Integer Wrapper Klasse als Ersatz für normale Arrays Java Basics - Anfänger-Themen 10
K Methoden Integer runden/aufrunden Java Basics - Anfänger-Themen 2
E Erste Schritte Lower Bounded Wildcards <? super Integer> Java Basics - Anfänger-Themen 1
M Datentypen Integer und Float Konflikt Java Basics - Anfänger-Themen 3
J Integer-Werte in Array ein- bzw. auslesen Java Basics - Anfänger-Themen 7
T Integer Wert in andere Methode übergeben Java Basics - Anfänger-Themen 2
N Probleme bei Speicherung eines Integer-Array in Datei speichern Java Basics - Anfänger-Themen 3
C Zwei Integer Arrays "kombinieren" Java Basics - Anfänger-Themen 10
D Integer Fehlermeldung exception Java Basics - Anfänger-Themen 4
M Höchster Integer aus 9 Zahlen Java Basics - Anfänger-Themen 13
I Klassen Integer von BL in GUI übergeben | Fehler Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
D Datentypen Ein Integer Feld in einen String wandeln ohne Nullenunterdrückung Java Basics - Anfänger-Themen 6
R integer zahlenfolge speichern, ausgeben Java Basics - Anfänger-Themen 1
L Summer aller Integer-Zahlen im Intervall [x,y] Java Basics - Anfänger-Themen 6
K ArrayList<Integer> problem Java Basics - Anfänger-Themen 3
L Vom Benutzer eingebene Integer addieren und ausgeben. Java Basics - Anfänger-Themen 11
S integer absteigend sortieren Java Basics - Anfänger-Themen 2
S ArrayList<ArrayList<Integer>> sortieren Java Basics - Anfänger-Themen 3
T Variablen Integer in Stmt Java Basics - Anfänger-Themen 13
B gemischter string zu integer Java Basics - Anfänger-Themen 22
R Big Integer Java Basics - Anfänger-Themen 8
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
B Variablen Wertezuweisung bei integer Java Basics - Anfänger-Themen 5
J Integer Werte in Array einlesen Java Basics - Anfänger-Themen 6
E Integer oder Strings spiegeln (in while loop) Java Basics - Anfänger-Themen 6
D String mit Integer Variablen Namen vergleichen, möglich? Java Basics - Anfänger-Themen 6
G Was passiert bei einem Overflow von zwei Integer Java Basics - Anfänger-Themen 6
H Integer.toString(int i) vs. String.valueOf(int i) Java Basics - Anfänger-Themen 12
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
N Probleme beim Rechnen mit Integer und double Java Basics - Anfänger-Themen 4
A Integer aus Stream to Double Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben