Ergebnis 1 bis 3 von 3
  1. #1
    Anfänger
    Registriert seit
    09.06.2010
    Beiträge
    20

    Unglücklich Sudoku aus Textdatei in einen Zweidimensionalen Array einlesen.

    Hallo Leute,
    ich bin hier neu und werde euch gleich einmal versuchen auszunutzen, um meine Programmieraufgabe aus der Uni zu lösen (scherz)

    Ich habe das Problem, dass ich nicht weiss, wie ich ein 9x9 Sudoku aus einer Textdatei in einen zweidimensionalen Array einlesen soll. Ich habe schoneinmal einige Versuche gestartet, allerdings funktioniert es nicht so, wie ich es will- vielleicht könnt ihr mir ja weiterhelfen! :-)

    Inhalt der sudoku.txt
    Code:
    100503089
    090070200
    600000003
    400080130
    067030490
    001040008
    900000006
    004010020
    720809001
    Meine Klasse:
    Code:
    public class Sudoku {
    	static String[] dateiZeilen=new String [9];
    
    	//static final char TRENNER=';';
    	static int[][] sudokuarray=new int[10][10];
    	
    	public static int[][] leseTxtInZweidimensionalesArray() throws IOException {
    		String zahlencode = "sudoku.txt";
    		FileReader fileReader;
    		try{
    			fileReader = new FileReader (zahlencode);
    			BufferedReader bufferedReader = new BufferedReader(fileReader);
    		
    		for(int x=0;x<zahlencode.length();x++)
    		{
    			for(int i=0;i<zahlencode.length();i++)
    			{
    		sudokuarray[x][i]=new Integer(zahlencode.charAt(i));
    
    			}
    		}}catch (FileNotFoundException e){
    				System.out.println("Datei wurde nicht gefunden");
    			}catch (IOException e){
    				e.printStackTrace();
    			}
    
    	return sudokuarray;
    	}
    	
    	public static void main(String[] args) throws IOException {
    
    		leseTxtInZweidimensionalesArray();
    		System.out.println(sudokuarray[0][8]);
    	}
    }

    Falls ihr Lust habt, könnt ihr euch ja da reindenken und etwas vorschlagen.
    Vielen Dank schonmal im Voraus!

    Euer Marcel

  2. #2
    OpCodeKiddy Avatar von EBFE
    Registriert seit
    30.03.2009
    Beiträge
    442

    Standard

    Ich hab das mal etwas kommentiert und "arbeitsfähig" gemacht, ohne den logischen Ablauf zu ändern. Mir scheint es allerdings so, als ob du die vorhergehenden Aufgaben nicht wirklich bearbeitet hast
    Btw: schon länger kein Java mehr gemacht, daher keine Garantie auf Java-Coding-Convention "Korrektheit"

    Code:
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Sudoku {
        static String[] dateiZeilen=new String [9];
    
        //static final char TRENNER=';';
        
        //static int[][] sudokuarray=new int[10][10]; <--- Warum 10x10 Feld?
        static int[][] sudokuarray = new int[9][9];
        
        // (0) Klammerung einheitlich gestalten
        // (1) Benennung sollte eigentlich in englisch sein ;)
        // (2) Variablen/Methodennamen sollten zwar aussagekräftig,
        // aber trotzdem möglichst kurz gehalten werden ;)
        public static int[][] leseTxtIn2DArray() throws IOException 
        {
            String zahlencode = "sudoku.txt";
            FileReader fileReader;
            try
            {
                fileReader = new FileReader (zahlencode);
                BufferedReader bufferedReader = new BufferedReader(fileReader);
    
                //(3) indentation einheitlich gestalten!
                
                //for(int x=0;x<zahlencode.length();x++)  <---
                // soll also solange einlesen, wie der Dateiname lang ist? ;)
                // lieber: entweder festkodieren oder solange Datei noch lesbar ist
                // hier die einfache Variante:
                for (int i = 0; i < sudokuarray.length; i++)
                {
                    //for(int i=0;i<zahlencode.length();i++)  <---
                    //hier das gleiche - der Dateiname hat nix mit der Datei selbst
                    //am Hut
                    for (int j = 0; j < sudokuarray[0].length; j++)
                    {
                        int input;
                        //wir wollen nur Zahlen 0 bis 9 haben, den Rest ignorieren
                        do
                        {
                            input = bufferedReader.read();
                           // -1 wird zurückgegeben, wenn die Datei zu Ende ist, da wir und aber in der Zeit immer
                           // noch in der Schleife befinden, heißt es schlicht, dass die Sudokudatei nicht 9x9 Feld entspricht
                            if (input == -1) 
                           //Hier sollte man vielleicht eine passendere Exception nachschlagen - dazu war ich aber zu faul ;)
                                throw new IOException("Datei unvollständig");
                        }while (Character.isDigit(input) != true);
                        //kürzer und gebräuchlicher:
                        //while (!Character.isDigit(input))
                        sudokuarray[i][j] = Character.digit(input, 10);                    
                    }
                }
            }catch (FileNotFoundException e)
            {
                System.out.println("Datei wurde nicht gefunden");
            }catch (IOException e)
            {
                    e.printStackTrace();
            }
    
        return sudokuarray;
        }
        
        public static void prettyPrint2DArray(int[][] arr)
        {
            for (int i = 0; i < arr.length; i++)
            {
                for (int j = 0; j < arr[0].length; j++)
                    System.out.print(arr[i][j]);
                
                System.out.println();
            }
            
        }
        public static void main(String[] args) throws IOException 
        {
            leseTxtIn2DArray();
            // was passiert, wenn beim Einlesen ein Fehler aufgetreten ist?
            // sollte das Array dann lieber nicht ausgegeben werden?
            System.out.println(sudokuarray[0][8]);
            prettyPrint2DArray(sudokuarray);
        }
    }
    Geändert von EBFE (10.06.2010 um 11:03 Uhr)
    TrueCrypt/RAR/Zip Passwort vergessen und das Bruten dauert ewig? Oder brauchst du fein abgestimmte Wortlisten? Hilf dir selbst mit WLML - Word List Markup Language
    Gib Stoned/Mebroot/Sinowal und anderen Bootkits keine Chance: Anti Bootkit v 0.8.5

  3. #3
    Anfänger
    Registriert seit
    09.06.2010
    Beiträge
    20

    Standard

    Hey, danke für die schnelle Antwort. :-)
    Ich habe die vorangehenden Aufgaben sogar ziemlich gut bearbeitet, allerdings, haben die mich nicht auf diese Aufgabe vorbereitet- an meiner Uni wird man bei Java ziemlich ins kalte Wasser geworfen und sich selbst überlassen- ziemlich schwierig, wenn man keine Vorkenntnisse hat.

    Zu deinem veränderten Code:
    Leuchtet mir soweit schoneinmal alles ein, plötzlich komm' ich mir so dämlich vor, wenn ich meine Version ansehe. Am meisten ärgert mich der Denkfehler im bezug darauf, dass ich die Datei so lang einlese, wie der Dateinamen lang ist. Wirklich blöd von mir- aber einmal muss man ja soeinen Fehler machen

    Ich danke dir auf jeden Fall!

    Grüße,
    mrzl

Ähnliche Themen

  1. Bild in Array einlesen
    Von SleiZer im Forum C, C++
    Antworten: 8
    Letzter Beitrag: 18.09.2009, 16:09
  2. Ordnernamen einlesen
    Von Variable X im Forum Delphi
    Antworten: 2
    Letzter Beitrag: 31.07.2009, 10:42
  3. [VB.net] Problem mit RichTextBox & Datei einlesen
    Von krusty im Forum .NET Sprachen - Techniken
    Antworten: 4
    Letzter Beitrag: 30.06.2009, 13:23
  4. Games>> Sudoku
    Von w4t3rdr4g0n im Forum Mobile Devices
    Antworten: 2
    Letzter Beitrag: 03.10.2007, 09:30

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •