Variablen Ausgabe bzw. einlese Fehler

der bobo

Mitglied
Hallo,
ich verwend Greenfoot und habe folgenden Programmcode:
Java:
import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.io.*;
import javax.swing.JOptionPane;
/**
 * Write a description of class generator here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class generator extends Actor
{
    static String[] name_random;
    static String[] name_sortiert;
    static int zeilen=0;
    static boolean geklappt=false;
    /**
     * Act - do whatever the generator wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    public void act() 
    {
        String datei = JOptionPane.showInputDialog(
                null, "Geben sie das Verzeichnis und die Datei an","z.B. C:\\Users\\Public\\Documents\\namen.txt");
        zählen(datei);
        auslesen(datei);
        ausgeben();

    }   

    public void zählen(String datei){
        try {BufferedReader in = new BufferedReader(new FileReader(datei));
            while (in.readLine() != null)
            {
                zeilen++;
            } 
            name_random= new String[zeilen];
            name_sortiert= new String[zeilen];
        }
        catch (FileNotFoundException e){
            System.out.println("Datei nicht gefunden");

        }catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void auslesen(String datei){
        try {int i=0;
            BufferedReader in = new BufferedReader(new FileReader(datei));
            String zeile = null;
            while ((zeile = in.readLine()) != null) {
                name_sortiert[i]=zeile;
                i++;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void ausgeben(){
        for (int i=0;i<zeilen;i++){

            random(i);

        }
        for (int i=0;i<zeilen;i++){

            JOptionPane.showConfirmDialog(null,
                "Nächsten namen Ausgeben",
                "Ausgabe",
                JOptionPane.YES_OPTION);
            System.out.println(name_random[i]);                   

        }
    }

    public void random(int a){
        int x;
        geklappt=false;
        while (geklappt=false){
            x=Greenfoot.getRandomNumber(zeilen);
            if (name_sortiert[x]!=null){
                name_random[a]=name_sortiert[x];
                name_sortiert[x]=null;
                geklappt=true;
            }

        }
    }
}

Bei dem oben angegebenen Code soll Java eine txt-Datei zeilenweise einlesen und die eingelesenen Zeilen in zufälliger Reihenfolge ausgeben. Wenn ich das Programm allerdings ausführe wird immer "null" ausgegeben.Könnt ihr mir helfen meinen Fehler zu finden, denn ich habe trotz intensiver Suche noch nichts gefunden.
Danke schon mal im voraus Bobo.
 

turtle

Top Contributor
Wow, welch ein kruder Code

Der Reihe nach
Java:
   static String[] name_random;
    static String[] name_sortiert;
    static int zeilen=0;
    static boolean geklappt=false;
ENTFERNE die static Modifier!

Klassennamen beginnen per Konvention mit einem Grossbuchstaben!
und diese Routine verstehe ich nicht
Java:
	public void ausgeben() {
		for (int i = 0; i < zeilen; i++) {

			random(i);

		}
		for (int i = 0; i < zeilen; i++) {

			JOptionPane.showConfirmDialog(null, "Nächsten namen Ausgeben", "Ausgabe", JOptionPane.YES_OPTION);
			System.out.println(name_random[i]);

		}
	}
 

der bobo

Mitglied
Erstmal danke für die Antwort.
Bei der Routine die sie nicht verstehen wird zuerst über eine for-schleifen die Routine random aufgerufen und dieser der integerwert i übergeben.danach findet die eigentliche Ausgabe statt. Diese Ausgabe geschieht auch wieder mit einer for-schleife .in der schleife wird ein Dialog erstellt(Der Dialog soll verhindern, dass alle zeilen auf einmal ausgegeben werden).wenn der Dialog durch drücken eines Buttons geschlossen wird, wird eine zeile ausgegeben
 

kaoZ

Top Contributor
Öhm

Java:
public void ausgeben() {
        for (int i = 0; i < zeilen; i++) {
            random(i);
        }
        for (int i = 0; i < zeilen; i++) {
            JOptionPane.showConfirmDialog(null, "Nächsten namen Ausgeben", "Ausgabe", JOptionPane.YES_OPTION);
            System.out.println(name_random[i]);
        }
    }

Das ist jetzt nicht wirklich innovativ,

Warum nicht ein Array oder eine Collection ?

Code:
Einlesen -> in Liste Speichern -> per JOptionPane ausgeben

insofern das wirklich so gewollt ist?!

zudem sollte das Ein/Auslesen der Datei in einer Separaten Klasse / oder zumindest Methode stattfinden.

z.B ( ohne Exception - Handling etc. / könnte man auch eine Utilityklasse für Schreiben )

Nur als fiktives Beispiel


Java:
public class Test {
	
	ArrayList<String> lines = new ArrayList<>();
	
	public Test() {}
	
	public void readFile(String fileName){
		BufferedReader reader;
		File file;
		
		try {
			file = new File(fileName);
			reader = new BufferedReader(new FileReader(file));
			
			readLines(reader, lines);
			
			reader.close();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
	private void readLines(BufferedReader reader, ArrayList<String> list) throws IOException{
		
		String line = "";
		
		while((line = reader.readLine()) != null){
			list.add(line);
		}
	}
	
	public void showDialog(){
		for (String string : lines) {
			JOptionPane.showMessageDialog(null, string);
		}
	}
	
	public static void main(String[] args) throws IOException {
		Test t = new Test();
		t.readFile("H:/Apps/Names.txt");
		
		t.showDialog();
	}
}
 
Zuletzt bearbeitet:

turtle

Top Contributor
Ich wurde vorhin mit meinen "Kitikpunkten" unterbrochen, aber nun geht es weiter:D

Es gibt die Methode zählen. Die gibt aber void zurück und tut nicht was der Name suggeriert. Sie macht die Arrays so gross, das n-Zeilen in der Datein reinpassen. Wie kaoz schon richtig andeute, wäre eine List<String> besser geeignet, zumal diese dynamisch wachen kann.

Es gibt die Methode auslesen. Ich kann zwar ein Buch auslesen aber eine Datei? In der Methode wird auch nichts ausgelesen, sondern die Routine readLine benutzt. Und read ist für mich das Gegenteil von ausXXX, oder? Ich hätte die Method readAllLines genannt.

Zum Schluss rufst du ausgeben auf. Wieder kein Hinweis, das irgendwo Zeilen in zufälliger Reihenfolge gebracht/getauscht werden. Dazu müsste man in den Code schauen, um das zu begreifen.

Dein Exception-Handling ist ebenfalls ein bisschen merkwürdig.
In der Methode machst du
System.out.println("Datei nicht gefunden");
aber im normalen Stacktrace werden mehr Informationen gegeben, nämlich unter anderem WELCHE Datei nicht gefunden werden konnte. Daneben und das finde ich noch schwerwiegender "behandelst" du die Exception gar nicht, sondern dein Programm läuft weiter. Und natürlich gibt das im weiteren Lauf weitere Probleme. Was kannst du als Behandlung machen? Genau, nichts. Also ist es besser die Exception dem Aufrufer zu melden, der dann in diesem Fall das Programm abbrechen sollte.

Ich habe dein Programm mal umgeschrieben und die mir aufgefallenen Punkte eingearbeitet. Ist mit Sicherheit nicht perfekt, aber definitiv "besser" als deine Version.;)

Und NICHT entmutigen lassen, GENAUSO haben wir alle mal angefangen SW zu schreiben;) Und nur, indem man Code anderer Leute sieht, lernt man dazu und kann das in seinen eigenen Programmen verwenden:idea:

Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.swing.JOptionPane;

/**
 * Write a description of class generator here.
 * 
 * @author (your name)
 * @version (a version number or a date)
 */
public class Generator {
	List<String> lines;
	private Random random = new Random();

	public static void main(String[] args) {
		try {
			Generator generator = new Generator();
			String dateiName = JOptionPane.showInputDialog(null, "Geben sie das Verzeichnis und die Datei an",
					"C:\\Users\\Public\\Documents\\namen.txt");
			generator.readAllLines(dateiName);
			generator.tauscheZeilen();
			generator.ausgeben("turtle.out");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	public Generator() {
		lines = new ArrayList<>();
	}

	public void readAllLines(String dateiName) throws FileNotFoundException, IOException {
		try (BufferedReader in = new BufferedReader(new FileReader(dateiName))) {
			String fileLine = null;
			while ((fileLine = in.readLine()) != null) {
				lines.add(fileLine);
			}

		}
	}

	public void tauscheZeilen() {
		int anzahlTauschen = 1000 + random.nextInt(1000);
		for (int i = 0; i < anzahlTauschen; i++) {
			int zeile1 = random.nextInt(lines.size());
			int zeile2 = random.nextInt(lines.size());
			String string1 = lines.get(zeile1);
			lines.set(zeile1, lines.get(zeile2));
			lines.set(zeile2, string1);
		}
	}

	public void ausgeben(String dateiName) {
		try (PrintWriter out = new PrintWriter(new FileWriter(dateiName))) {
			for (String line : lines) {
				out.println(line);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
 
Zuletzt bearbeitet:

der bobo

Mitglied
hallo

wenn ich denn Code bei meinem Editor einfüge und dann compilieren will erscheint folgende Fehlermeldung
" diamond operator is not supported in -source 1.6 (use -source 7 or higher to enable diamond operator)
bei dieser zeile
Code:
lines = new ArrayList<>();


Bobo
 

Joose

Top Contributor
....
wenn ich denn Code bei meinem Editor einfüge und dann compilieren will erscheint folgende Fehlermeldung
" diamond operator is not supported in -source 1.6 ....

Deswegen tut man Code aus Foren nicht einfach Copy&Paste in sein eigenes Program einfügen. Versuche erst den Code zu verstehen, dann weißt du auch das man hier oder da vielleicht noch Anpassungen vornehmen muss.
 

stg

Top Contributor
wenn ich denn Code bei meinem Editor einfüge und dann compilieren will erscheint folgende Fehlermeldung
" diamond operator is not supported in -source 1.6 (use -source 7 or higher to enable diamond operator)
bei dieser zeile
Code:
lines = new ArrayList<>();

Wenn du noch eine alte Java6-Version verwendest, dann schreib stattdessen
Code:
lines = new ArrayList<String>();
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
kodela Gemittelte Ausgabe von Buchstaben Allgemeine Java-Themen 10
L Event Handling Ausgabe von Radioboxen und befüllen von Comboboxen Allgemeine Java-Themen 1
curranux Ausgabe als Textdatei schreiben. Allgemeine Java-Themen 2
Master3000 Komisches Zeichen als Ausgabe in der Konsole Allgemeine Java-Themen 20
O Formatierte String ausgabe bei vier Variablen in einer Zeile Allgemeine Java-Themen 1
R In der Ausgabe sollte anstelle des obersten Sterns ein "+" stehen nur scheitere ich bei der Implementierung Allgemeine Java-Themen 9
L Ausgabe von in Echtzeit ausgeführten Code Allgemeine Java-Themen 9
B System.out Ausgabe auf jtextarea Fehlersuche Allgemeine Java-Themen 8
J Ausgabe von Links nach Rechts ausgeben? Allgemeine Java-Themen 2
AssELAss Log4j Logging Ausgabe für jede Klasse in seperates File Allgemeine Java-Themen 2
heyluigi Random Integer Array Ausgabe nach Größe sortieren Allgemeine Java-Themen 6
B Game of life Ein und Ausgabe Configurations Datei Allgemeine Java-Themen 17
Exdroid BlueJ Wie bekomme ich die Ausgabe in eine TXT Datei? Allgemeine Java-Themen 2
M Input/Output CMD Ausgabe als ButtonEvent Allgemeine Java-Themen 5
Tausendsassa Input/Output Problem mit der gleichzeitigen Ausgabe zweier Threads Allgemeine Java-Themen 8
S 2-spaltige Ausgabe als Tabelle ausgeben Allgemeine Java-Themen 12
C Hilfe bei einer Point Ausgabe Allgemeine Java-Themen 7
B JFrame Text Ausgabe Allgemeine Java-Themen 7
M Eclipse Keine Ausgabe mehr bei Fehlern Allgemeine Java-Themen 3
O log4j, Problem bei Ausgabe null-Wert Allgemeine Java-Themen 0
J Ausgabe nach Excel Allgemeine Java-Themen 1
balwan Unverständlichkeit einer Ausgabe Allgemeine Java-Themen 4
K Input/Output Ausgabe in Textdatei Allgemeine Java-Themen 7
B Barcode4j Ausgabe Formatieren Allgemeine Java-Themen 3
S Speichern/Laden/Hinzufügen/Löschen der Array-Wörter; unerwartete Ausgabe Allgemeine Java-Themen 6
H Scanner: Ausgabe erst nach Abbruch Allgemeine Java-Themen 8
K Methoden Ausgabe erfolgt nicht Allgemeine Java-Themen 6
T Ausgabe falsch! Allgemeine Java-Themen 5
W Input/Output Ausgabe eines Statements Allgemeine Java-Themen 5
P Falsche Ausgabe Allgemeine Java-Themen 5
nutellastulle Zugriff, Übergabe, Bearbeitung und Ausgabe von Jlist Allgemeine Java-Themen 6
D Ausgabe von C# Konsolenanwendung lesen Allgemeine Java-Themen 5
O Input/Output CMD-Ausgabe abfangen und in Datei speichern Allgemeine Java-Themen 8
P Pdf ausgabe Allgemeine Java-Themen 3
schlingel Process - Ausgabe leer Allgemeine Java-Themen 5
C Ausgabe unklar Allgemeine Java-Themen 2
J Applet Ausgabe beim Speichern ausblenden Allgemeine Java-Themen 4
Rudolf Java Ausgabe einer Texttabelle im Prompt Allgemeine Java-Themen 4
P Ausgabe der berechneten Fakultaet Allgemeine Java-Themen 12
M Ausgabe in Datei zum Ausdruck Allgemeine Java-Themen 2
E formartierte Ausgabe zur Laufzeit Allgemeine Java-Themen 2
D Bildschirm Flackert bei Ausgabe Allgemeine Java-Themen 4
K Windows Fehlerkanal -> Ausgabe in Datei Allgemeine Java-Themen 6
H Ausgabe von zwei Textfeldern Allgemeine Java-Themen 3
R log4j - Ausgabe der Logs Allgemeine Java-Themen 3
L in zufälligen Sekunden Ausgabe machen Allgemeine Java-Themen 2
W Ausgabe beschleunigen? Allgemeine Java-Themen 3
O Backslashes werden in der Ausgabe nicht übernommen Allgemeine Java-Themen 5
X Ausgabe auf JEditorPane Allgemeine Java-Themen 5
B Ausgabe auf der Konsole bei Nebenläufigkeit, Threads und Synchronisation Allgemeine Java-Themen 8
A Ausgabe in OpenOffice Calc oder pdf Allgemeine Java-Themen 3
T Ausgabe in txt.Datei speichern Allgemeine Java-Themen 23
S Boolean Ausgabe JasperReports Allgemeine Java-Themen 2
M Consolen Ausgabe Allgemeine Java-Themen 3
G Ausgabe mit tag Allgemeine Java-Themen 3
W Ausgabe von Fließkommazahlen formatieren Allgemeine Java-Themen 2
D Ausgabe HTML-Seite Allgemeine Java-Themen 5
H Externe Prozesse und Inputstreams - ausgabe in JTextArea Allgemeine Java-Themen 3
G Ausgabe in eine txt Datei schreiben? Allgemeine Java-Themen 7
T Wieso erfolgt keine Ausgabe. /Excel Allgemeine Java-Themen 19
J Ausgabe der Quelltext Zeilennummer? Allgemeine Java-Themen 12
B serlvet system.out ausgabe Allgemeine Java-Themen 4
B Ausgabe auf stdout "löschen" und dafür neue Ausgab Allgemeine Java-Themen 10
X e.printStackTrace Ausgabe in Datei umleiten? Allgemeine Java-Themen 14
B Ausgabe mit print wird verzögert Allgemeine Java-Themen 9
D Dateien und ordner ausgabe Allgemeine Java-Themen 5
M Rekursive Ausgabe einer linkedList Allgemeine Java-Themen 8
M Ausgabe in Console formatieren`? Allgemeine Java-Themen 12
D Seltsame Ausgabe beim zusammenführen zweier Dateien Allgemeine Java-Themen 14
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
H falsche ausgabe Allgemeine Java-Themen 15
S Datei Ausgabe Allgemeine Java-Themen 4
T Fehlersuche bzw. woher kommt diese ausgabe? Allgemeine Java-Themen 2
D Formatierte Ausgabe vom ProcessBuilder Allgemeine Java-Themen 4
S Endlos-Schleife bei Ausgabe von ArrayList Allgemeine Java-Themen 6
L Ausgabe auf GUI verzögert Allgemeine Java-Themen 2
D Die Ausgabe von Tidy in eine Datei umleiten Allgemeine Java-Themen 3
R Vorzeichen bei der Ausgabe Allgemeine Java-Themen 7
G Problem mit Ausgabe-Kanälen Allgemeine Java-Themen 2
T Ausgabe bei Struktogrammen Allgemeine Java-Themen 2
G JTextField: Feld für Ausgabe von Meldungen Allgemeine Java-Themen 14
B Formatierte Ausgabe Allgemeine Java-Themen 3
G Einlesen der Ausgabe eines Shellskripts mit Java Allgemeine Java-Themen 2
B Fehler bei Ausgabe in Datei Allgemeine Java-Themen 11
G Ausgabe Allgemeine Java-Themen 9
E Output Fehler (Java-Programm Kuchen) Allgemeine Java-Themen 11
S Fehler: <ID> erwartet Allgemeine Java-Themen 5
P Fehler: Hauptklasse Main konnte nicht gefunden oder geladen werden Ursache: java.lang.ClassNotFoundException: Main Allgemeine Java-Themen 24
Pinhg Discord JDA Bot - Fehler Allgemeine Java-Themen 3
KonradN CVE-2022-21449: Fehler in Java bei Signaturprüfung Allgemeine Java-Themen 20
L Fehler mit Boolean. (Glaube ich zumindest) Allgemeine Java-Themen 6
P Selenium Scriipt zeigt Fehler beim Import Allgemeine Java-Themen 3
O Fehler bei Variablen Allgemeine Java-Themen 2
HerrBolte Seltsamer Fehler nur in der Windows- und nicht in der Java-Console O_O Allgemeine Java-Themen 16
M Kein Scanner Fehler durch falsche EIngabe Allgemeine Java-Themen 4
N nicht einsehbarer Fehler im code, kann nicht mehr übersetzten Allgemeine Java-Themen 51
yakazuqi Fehler beim Laden. JDA (Java Discord API) Allgemeine Java-Themen 1
C Fehler bei der Benutzung von itextpdf Allgemeine Java-Themen 1
U Fehler beim Compillieren Allgemeine Java-Themen 13
x46 String Format Fehler Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben