Strings aus externen Dateien Einlesen (Sudoku)

Status
Nicht offen für weitere Antworten.

VIDEN

Mitglied
Hi,

ich habe ein Sudoku Spiel Programmiert.
Da ich unter Zeitdruck stehe, habe ich im Moment keine Zeit einen richtig funktionierenden Generator zu coden, der verschiedene Schwierigkeitsgrade unterstützt.
Ich will also eine spielbare Version mit 3 Sudoku "DatenBanken" haben. (easy, medium, hard).
Bis jetzt sieht das so aus:

Code:
import java.util.ArrayList;
import java.util.Random;
/**
 *
 * @author eberldav
 */
public class Generator {
    
    ArrayList easyPuzzles= new ArrayList();
    ArrayList mediumPuzzles= new ArrayList();
    ArrayList hardPuzzles= new ArrayList();
    
    /** Creates a new instance of Generator */
    public Generator() {
       int[][] test0={//easy
            {3, 0, 0, 0, 0, 0, 0, 2, 0},
            {0, 7, 5, 4, 2, 1, 6, 0, 9},
            {6, 2, 0, 3, 5, 9, 8, 7, 4},
            {0, 3, 0, 5, 8, 0, 0, 0, 7},
            {0, 8, 7, 0, 0, 4, 0, 5, 0},
            {0, 9, 0, 1, 6, 7, 2, 0, 0},
            {0, 5, 0, 2, 1, 0, 0, 4, 0},
            {4, 6, 8, 7, 0, 0, 0, 0, 2},
            {7, 0, 0, 8, 4, 3, 9, 6, 5}};
       int[][] test1={//hard
            {4, 0, 0, 0, 1, 6, 0, 0, 5},
            {0, 0, 1, 0, 9, 2, 3, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 9, 3, 0, 7, 0, 0, 5, 0},
            {2, 0, 4, 0, 0, 0, 1, 0, 7},
            {0, 6, 0, 0, 8, 0, 9, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 0},
            {0, 0, 5, 1, 2, 0, 4, 0, 0},
            {9, 0, 0, 7, 4, 0, 6, 0, 3}};
        
        int[][] test2={
            {0, 9, 0, 3, 7, 0, 0, 0, 5},
            {3, 0, 0, 0, 0, 4, 0, 9, 1},
            {0, 4, 0, 1, 0, 0, 0, 6, 0},
            {0, 0, 0, 0, 0, 9, 0, 0, 0},
            {4, 0, 0, 6, 0, 5, 0, 0, 2},
            {0, 0, 0, 8, 0, 0, 0, 0, 0},
            {0, 2, 0, 0, 0, 7, 0, 3, 0},
            {1, 8, 0, 4, 0, 0, 0, 0, 7},
            {7, 0, 0, 0, 8, 3, 0, 1, 0}};
        
        int[][] test3={
            {0, 7, 0, 6, 0, 0, 0, 0, 0},
            {0, 3, 1, 2, 0, 0, 5, 0, 0},
            {0, 0, 0, 5, 0, 0, 0, 0, 0},
            {0, 4, 0, 0, 3, 0, 6, 0, 0},
            {0, 0, 0, 0, 0, 5, 0, 0, 2},
            {0, 0, 7, 0, 0, 0, 0, 9, 1},
            {6, 0, 9, 0, 0, 0, 4, 0, 0},
            {0, 0, 0, 0, 0, 0, 0, 0, 3},
            {0, 0, 0, 1, 7, 6, 2, 0, 0}};
       
        this.addBoard(test0, 0);
        this.addBoard(test1, 2);
        this.addBoard(test2, 1);
        this.addBoard(test3, 1);
    }
    
    /**add a new Board to the data base*/
    public boolean addBoard(Board boardToAdd, int difficulty){
        switch(difficulty){
            case 0:
                easyPuzzles.add(boardToAdd);
                return true;
            case 1:
                mediumPuzzles.add(boardToAdd);
                return true;
            case 2:
                hardPuzzles.add(boardToAdd);
                return true;
            default: return false;
        }
    }
    
        /**add a new Board to the data base using int array*/
    public boolean addBoard(int[][] cellValues, int difficulty){
        Board boardToAdd= new Board(cellValues);
        Solver solver= new Solver(boardToAdd);
        solver.run();
        
        switch(difficulty){
            case 0:
                easyPuzzles.add(boardToAdd);
                return true;
            case 1:
                mediumPuzzles.add(boardToAdd);
                return true;
            case 2:
                hardPuzzles.add(boardToAdd);
                return true;
            default: return false;
        }
    }
    
    /**return a Puzzle according to its difficulty*/
    public Board getNewPuzzle(int difficulty){
        Random randomNum= new Random();
        Board board=new Board();
        Board tmpBoard;
        switch(difficulty){
            case 0:
                tmpBoard=(Board)easyPuzzles.get(randomNum.nextInt(easyPuzzles.size()));
                board=tmpBoard.copyInto(board);
                return board;
            case 1:
                tmpBoard=(Board)mediumPuzzles.get(randomNum.nextInt(mediumPuzzles.size()));
                board=tmpBoard.copyInto(board);
                return board;
            case 2:
                tmpBoard=(Board)hardPuzzles.get(randomNum.nextInt(hardPuzzles.size()));
                board=tmpBoard.copyInto(board);
                return board;
            default: return board=null;
        }
    }
}

Nur die ganzen Datenbanken jedes mal im Konstrukter so zu laden halte ich für nicht sehr sinnvoll, da dieser bei ca 50 Sudokus pro Schwierigkeitsgrad einfach total überladen ist.
Daher würde ich die Sudokus gerne aus einer externen Datei einfach irgendwie einlesen.
Schreibform für die Puzzles wäre dann diese:
"000306500800500000010000040900080020000000000040060001050000010000009002006108000"

nur ich hab absolut keine Ahnung wie ich das hinbekommen soll, ich habe garkeine Erfahrung wie man auf Java-externe Dateien zugreifen kann bzw ob das überhaupt geht und ob es das Ganze wirklich einfacher macht.
Daher würde ich mich über jede Hilfe freuen!

Grüsse David
 

The_S

Top Contributor
Entweder missverstehe ich dein Vorhaben jetzt, oder dir hilft der BufferedWriter bzw. BufferedReader weiter ???:L
 
L

Leroy42a

Gast
Hobbit_Im_Blutrausch hat gesagt.:
Entweder missverstehe ich dein Vorhaben jetzt, oder dir hilft der BufferedWriter bzw. BufferedReader weiter ???:L

Du verstehst schon richtig, allerdings ist da noch wesentlich
mehr nötig als ein BufferedReader

- zeilenweise die Sudoku-Rohdaten einlesen
- umwandeln der characters in Zahlen
- befüllen der arrays

und angesichts der Einschränkung
VIDEN hat gesagt.:
nur ich hab absolut keine Ahnung wie ich das hinbekommen soll, ich habe garkeine Erfahrung wie man auf nicht Java-externe Dateien zugreifen kann
habe ich mich mal zurückgehalten. :(
 

meez

Top Contributor
VIDEN hat gesagt.:
ich habe garkeine Erfahrung wie man auf nicht Java-externe Dateien zugreifen kann


D.h. du weisst nicht wie man auf Java-interne Dateien zugreift...Was wiederum heisst, du weisst wie man auf externe Dateien zugreift... ???:L

Ich mag nicht keine Doppel-Verneinungen... :wink:
 

The_S

Top Contributor
zeilenweise = bufferedreader.readLine();
zahlen = Zeichenweiße durch das eingelesene durchgehen (z. B. charAt() und parsen
befüllen der arrays = array[0][0] = geparsteZahl
 

VIDEN

Mitglied
Danke für die schnellen Antworten!
Also für:

- umwandeln der characters in Zahlen
- befüllen der arrays

habe ich bereits eine Funktion, die ich auch so schon benutze.
aber eben bei:
- zeilenweise die Sudoku-Rohdaten

einlesen liegt mein Problem.

ist der von mir gedachte Lösungsweg denn Sinvoll oder gibt es was besseres?

Grüsse David

EDIT:

meez hat gesagt.:
VIDEN hat gesagt.:
ich habe garkeine Erfahrung wie man auf nicht Java-externe Dateien zugreifen kann


D.h. du weisst nicht wie man auf Java-interne Dateien zugreift...Was wiederum heisst, du weisst wie man auf externe Dateien zugreift... ???:L

Ich mag nicht keine Doppel-Verneinungen... :wink:

Das war keine doppelte Verneinung, das war einfach schlecht geschrieben.
Wollte damit sagen, dass ich nicht weis, wie man auf externe Dateien die keine *.java Files sind zugreift.

David
 
L

Leroy42a

Gast
VIDEN hat gesagt.:
ist der von mir gedachte Lösungsweg denn Sinvoll oder gibt es was besseres?

Der ist absolut sinnvoll:

Code:
BufferedReader br = new BufferedReader(new FileReader("meinSudoku.txt"));
String line;

while ((line = br.readLine()) !) null)
  // Umwandeln des Strings in ein int[][]
br.close();
 
L

Leroy42a

Gast
VIDEN hat gesagt.:
Wollte damit sagen, dass ich nicht weis, wie man auf externe Dateien die keine *.java Files sind zugreift.

Das heißt also im Umkehrschluß, daß du weist, wie man
auf externe Dateien die *.java-Files sind, zugreifen kann.

Keine Angst! Auf externe nicht-Java-Dateien kannst du genauso
wie auf externe Java-Dateien zugreifen! :meld:

( :bae: :cool: )
 

VIDEN

Mitglied
Leroy42a hat gesagt.:
VIDEN hat gesagt.:
Wollte damit sagen, dass ich nicht weis, wie man auf externe Dateien die keine *.java Files sind zugreift.

Das heißt also im Umkehrschluß, daß du weist, wie man
auf externe Dateien die *.java-Files sind, zugreifen kann.

Keine Angst! Auf externe nicht-Java-Dateien kannst du genauso
wie auf externe Java-Dateien zugreifen! :meld:

( :bae: :cool: )

damit meine ich, dass ich weis wie ich beispielweise von Generator.java auf die Methode run() von Solver.java zugreifen kann aber nicht wie von Generator.java auf die erste Zeile von Puzzles.txt
- Aber dank dir kann ich das ja jetzt doch ;)
...nur
Code:
while(line = br.readLine()) !) null)
da stimmt was mit den Klammern nicht

David
 
L

Leroy42a

Gast
Sorry, mein Fehler: :oops:
Code:
while ((line = br.readLine()) != null)
 

VIDEN

Mitglied
Hab alles implementiert:

Code:
try {
            BufferedReader in = new BufferedReader(new FileReader("EasyPuzzles.txt"));
            String line;
            while( null != (line = in.readLine()) ) {
                Board board= new Board(StringToIntArr(line));
                this.addBoard(board, 0);
            }
            in.close();
        } catch( Exception ex ) {
            System.out.println( ex );
        }

Dann habe ich eine File EasyPuzzles.txt im gleichen Ordner wie die src-files erstellt und dort ein paar Sudokus reingeschrieben.
wenn ich das Programm ausführe bekomme ich aber folgende exception:

java.io.FileNotFoundException: EasyPuzzles.txt (The system cannot find the file specified)

was mache ich falsch?

Grüsse David
 

VIDEN

Mitglied
Ist sie ja! werden da automatisch mit reinkopiert...

Arbeite mit netbeans und die file ist in:
netbeansproject\Sudkou\src

sowie:
netbeansproject\Sudkou\build\classes

hab sie auch testhalber mal ins
netbeansproject\Sudkou\dist
und
netbeansproject\Sudkou\dist\lib
kopiert, hilft alles nichts

David
 

The_S

Top Contributor
In welchem Verzeichnis wird dein Programm denn ausgeführt? Versuchs mal mit der absoluten Pfadangabe
 

VIDEN

Mitglied
Also die *. jar file liegt in
netbeansproject\Sudkou\dist

die *.class files in
netbeansproject\Sudkou\build\classes

wo es ausgeführt wird kann ich nicht sagen, ich versuchs mal mit dem absoluten pfad, aber das kann ja keine endgültige Lösung sein...

David

EDIT:

okay mit dem absoluten Pfad geht es aber wie bekomme ich das anders hin? Ich kann ja nicht von jedem der das Spiel benutzt erwarten, dass ers in das gleiche Verzeichnis kopiert wie ich es habe...


Grüsse David
 

The_S

Top Contributor
Du musst garantieren, dass das Programm auch aus dem Verzeichnis aufgerufen wird, in dem es sich befindet. Das wirste du aber kaum können.
 

VIDEN

Mitglied
Also, wenn ich das Programm über "Run Main Project" bei netbeans starten will, bringt er mir einen Fehler, weil er die Dateien nicht findet. (*.txt file im Ordner der *.jar)

Starte ich die *.jar direkt aus dem Ordner in der sie gespeichert ist, kann ohne Probleme auf die beiliegenden Textfiles zugegriffen werden. Lösche ich diese geht es logischerweise nicht mehr...

Also wie ich das sehe wird mir wohl nichts anderes übrig bleiben als während der entwicklung mit den absoluten Pfaden zu arbeiten und dann bei der "Veröffentlichung" auf die beiliegenden Dateien zu referieren.

Grüsse David
 

The_S

Top Contributor
Ähm, wenn der User später z. B. eine Verknüpfung auf den Desktop zu deinem Jar anlegt und dabei nicht angiebt, wo die Datei ausgeführt werden soll, wird sie auf dem Desktop ausgeführt und findet deine Textdatei auch nicht. Da diese sowieso statisch ist, wäre es evtl. von Vorteil sie gleich mit ins Jar zu packen oder?
 

VIDEN

Mitglied
wenn du mir sagst wie man das macht??

Greets David

btw. wenn ich die *.jar per Verknüpfung vom Desktop aus starte gehts auch, weil bei Windoof Verknüpfungen standardmässig im Zielpfad ausgeführt werden. Nichts desto trotz würde ich es bevorzugen die files in der Jar zu haben!

David
 
L

Leroy42a

Gast
Wie das in NetBeans geht weiß ich auch nicht,
aber im Allgemeinen so:

jar cvfm Anwendung.jar Manifest *.class resource1 resource2 ...
 

VIDEN

Mitglied
hmm ich bekomm das grad noch nicht hin, hab jetzt aber Feierabend und geh erstma nach Hause.
Ich hock mich morgen nochmal dran!

Danke David
 

The_S

Top Contributor
Schau mal in die FAQ, da gibts nen guten Beitrag zum Thema jar. Du musst die Datei dann aber über ClassLoader.getRessource laden.
 

VIDEN

Mitglied
Ich habe hersaugefunden, dass Netbeans mir alle Files aus
...\netbeansproject\Sudkou\build\classes
in die Jar packt.

Das Problem ist, durch den Absoluten Pfad versucht er nach wie vor auf den angegeben pfad zuzugreifen und sobald die Files da nicht mehr liegen gibts Probleme...

Grüsse David
 

The_S

Top Contributor
wie gesagt, du musst die Dateien über den ClassLoader aus dem JAR laden und nicht wie bisher aus dem Dateisystem deiner Festplatte.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
N MySQL mit Strings Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
P Strings: equals vs == Allgemeine Java-Themen 47
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
W Collections Suche Collection, um Strings mit Indizees versehen Allgemeine Java-Themen 47
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
Meeresgott Best Practice Strings auf Inhalte vergleichen Allgemeine Java-Themen 1
N DNA Strings vergleichen Allgemeine Java-Themen 1
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
K Vergleich von Strings von Objekten Allgemeine Java-Themen 4
J Strings int textdokumente speicher Allgemeine Java-Themen 3
KeVoZ_ Nacheinander folgende Strings in Textdokument auf neue Zeile schreiben Allgemeine Java-Themen 6
K Strings sortieren: 2 Kritieren Allgemeine Java-Themen 5
A Vector Strings in Array splitten Allgemeine Java-Themen 6
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
H RegularExpression zwischen zwei Strings Allgemeine Java-Themen 2
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
H Strings vergleichen Allgemeine Java-Themen 9
O Mustererkennung in Strings Allgemeine Java-Themen 4
Y String-Collection: längste gemeinsame Strings / Prefixe Allgemeine Java-Themen 3
F Problem mit Strings Allgemeine Java-Themen 8
D Strings chemisch splitten Allgemeine Java-Themen 3
K Wörter in Strings zählen Allgemeine Java-Themen 7
L Strings nach sortiertem String zurück ordnen Allgemeine Java-Themen 0
L Strings nach gleichem Muster ordnen Allgemeine Java-Themen 4
L Fragen für Facharbeit: Analyse von Strings in Java Allgemeine Java-Themen 4
D Strings vergleichen; Komma ignorieren Allgemeine Java-Themen 3
K Java Operatoren mit Strings darstellen Allgemeine Java-Themen 8
G Strings erzeugen Allgemeine Java-Themen 20
B HTML Tags in Strings umwandeln Allgemeine Java-Themen 4
N Input/Output Vergleich von identischen Strings schlägt fehl Allgemeine Java-Themen 5
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
A ,,Textformatierungsbefehle" für strings deaktivieren Allgemeine Java-Themen 8
S Strings vergleichen Allgemeine Java-Themen 11
C Strings in Excel einlesen! Allgemeine Java-Themen 2
S Strings gehen "kaputt" wenn ich in CVS ein und wieder auschecke. Allgemeine Java-Themen 2
X Datentypen Prozentualer Abgleich zwischen 2 Strings (Pattern?) Allgemeine Java-Themen 3
R MD5-Hash eines Strings bestimmen Allgemeine Java-Themen 2
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
J String zerlegen in einzelne Strings Allgemeine Java-Themen 7
F Konstanten mir Strings "verknuepfen" Allgemeine Java-Themen 10
1 zwei Strings vergleichen Allgemeine Java-Themen 16
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
S vector & strings Allgemeine Java-Themen 26
N Strings mit null wiedergabe Splitten Allgemeine Java-Themen 4
K Strings sortieren (knifflig) Allgemeine Java-Themen 7
P Codierung der strings umändern Allgemeine Java-Themen 10
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
F 2 Strings zusammenfügen Allgemeine Java-Themen 2
D Strings von HTML befreien Allgemeine Java-Themen 17
S Strings zu Color-Instanzen parsen? Allgemeine Java-Themen 7
C Strings zwischen 2 Zeichen auslesen Allgemeine Java-Themen 7
T Explizite Typkonversation mit Strings Allgemeine Java-Themen 9
R Locale spezifische DateFormat Strings? Allgemeine Java-Themen 3
M Wie kann ich alle System.out Strings in ein log window umleiten? Allgemeine Java-Themen 6
R Java function die Strings escaped, sodass ich sie in Javascript verwenden kann? Allgemeine Java-Themen 4
ruutaiokwu objektreferenz eines strings... Allgemeine Java-Themen 9
data89 [Kurze Frage] Ähnlichkeit zweier Strings ermitteln Allgemeine Java-Themen 19
S bestimmte Strings spliten! Allgemeine Java-Themen 7
M Warum Strings mit equals vergleichen... Allgemeine Java-Themen 6
Daniel_L Suche nach ganzen Wörtern (wholeword) in Strings? Allgemeine Java-Themen 4
A Strings joinen, Standard-Library? Allgemeine Java-Themen 9
Y Mal wieder vergleichen von Strings.[Leider noch ein Problem] Allgemeine Java-Themen 18
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
A Auslesen von Strings aus einer xls-Datei Allgemeine Java-Themen 16
G Spezialfrage zu Strings Allgemeine Java-Themen 11
C Textteile aus Strings extrahieren? Allgemeine Java-Themen 6
J Teile eines Strings ersetzen Allgemeine Java-Themen 2
G schnell Strings vergleichen Allgemeine Java-Themen 4
J Name eines Strings durch einen String festlegbar? Allgemeine Java-Themen 2
G Strings zerlegen und substrings auslesen Allgemeine Java-Themen 2
Z Letztes zeichen eines strings löschen Allgemeine Java-Themen 3
V Speicherplatz eines Strings? Allgemeine Java-Themen 12
H MIDlets und Strings Allgemeine Java-Themen 2
C Pixelanzahl eines Strings ermitteln Allgemeine Java-Themen 12
T Strings darf nur Ziffern, +/- haben Allgemeine Java-Themen 9
A Fehler beim Ersetzen eines Strings Allgemeine Java-Themen 3
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4
G byte[] mit Strings füllen Allgemeine Java-Themen 2
H strings in datei verschlüsseln , auslesen mit klartext aber! Allgemeine Java-Themen 2
F Strings in JList ausrichten/links/rechts/mittig Allgemeine Java-Themen 10
M String#equals(), Probleme mit großen Strings? Allgemeine Java-Themen 4
H ein Teil des Strings rausfiltern Allgemeine Java-Themen 8
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
C Strings zu groß um damit zu arbeiten Allgemeine Java-Themen 31
V Lib für Strings suchen und ersetzen (erweitert) Allgemeine Java-Themen 3
P Schnelles Auslesen von Strings für Syntaxhighlighting? Allgemeine Java-Themen 2
X Strings aus einer ArrayList zählen Allgemeine Java-Themen 11
C HASH Algorithmus 2 Strings ergeben das Selbe. Allgemeine Java-Themen 2
G Datei zeilenweise in Strings speichern Allgemeine Java-Themen 36
S Methode zum Zählen von Buchstaben in Strings gesucht Allgemeine Java-Themen 11
I vergleich und zählen von Strings Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben