Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst 2D Array von .txt dateien einlesen, aber wie?

Mitglied: StonedSoul

StonedSoul (Level 1) - Jetzt verbinden

01.02.2007, aktualisiert 03.02.2007, 10644 Aufrufe, 12 Kommentare

In einem Programm brauch ich ein 2Dimensionales Array int[][] wallkoords, dessen Inhalt von einer Text-Datei einlesen möchte.Das Array ist 25 x 25 Felder groß. Also zB:
static int wallkoords[][] =
{
Soll von einer Datei "LEVEL1.txt" gelses werden.
}
Hoffe, dass das Problem klar ist. Ich bin relativ neu beim Programmieren, also bitte nicht mit irgendwelchen Fremdwörtern rumschmeisen ^^ .
Danke!
Mitglied: AndreasHoster
02.02.2007 um 09:44 Uhr
Prinzipielle Vorgehensweise:
Dir bleibt nichts übrig, als Definition und Initialisierung zu trennen:
public class Test_Array {
static int [][] wallkoords; Definition
static {
statischer Konstruktor, wird nur einmal aufgerufen beim ersten Verwenden der Klasse, wobei die Frage ist, ob es nicht besser ist eine Methode dafür zu nehmen.
wallkoords = new int [25][25]; // Initialisierung
for(int i=0;i<25;i++) {
for(int j=0;j<25;j++) {
wallkoords[i][j] = Wert;
}
}
}
}
Dann musst Du in der Schleife die Datei einlesen und entsprechend zerlegen. Da kann ich Dir jetzt kein Beispiel bringen, da ich ja nicht weiß, wie Deine Datei aufgebaut ist, was passieren soll, wenn in der Datei keine 25 auf 25 Werte drin sind (oder wenn mehr drin sind) etc.
Aber
Bitte warten ..
Mitglied: StonedSoul
02.02.2007 um 13:03 Uhr
okay, dann war meine Frage bissl unklar, des mit dem static un der initialisierung is nicht mein problem.

wallkoords = new int [25][25];
for(int i=0;i<25;i++) {
for(int j=0;j<25;j++) {
wallkoords[i][j] = Wert;
Dieser Wert soll von einer txt Datei gelesen werden, darum gehts
}
}


Zum Beispiel soll das Array folgendermasen aussehen:

static int[][] wallkoords = {
{1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1},
{1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1},
};

Die ganzen Zahlen will ich aber nicht unbedingt im Quellcode haben, weil ich mindestens 20 verschiedene Versionen des Arrays brauch. Darum wollt ich das Array in irgendeiner Form (ich kann mich da anpassen) in einer Datei speichern, un das Programm läd dann beim Programmstart die ganzen Daten des Arrays von einer Datei. Das Laden von der Datei is mein Problem.
Danke
Bitte warten ..
Mitglied: AndreasHoster
02.02.2007 um 13:42 Uhr
01.
public class Test_Array { 
02.
    static int [][] wallkoords; 
03.
    static { 
04.
        java.lang.String sTemp; 
05.
        int i,j; 
06.
        wallkoords = new int [25][25]; 
07.
        try { 
08.
            // Datei öffnen 
09.
            java.io.BufferedReader oReader = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(new java.io.File("D:\\test.txt")))); 
10.
            // Zeile für Zeile einlesen 
11.
            i=0; 
12.
            while ((sTemp = oReader.readLine()) != null) { 
13.
               // Zeile in Einzelteile zerlegen (wir trennen durch , 
14.
                java.util.StringTokenizer stWerte = new java.util.StringTokenizer(sTemp,","); 
15.
                j=0; 
16.
                // Nun eintragen in den Array. Es wird nicht überprüft, ob die Grenzen überschritten werden! 
17.
                while(stWerte.hasMoreTokens()) { 
18.
                    wallkoords[i][j] = java.lang.Integer.parseInt(stWerte.nextToken()); 
19.
                    j++; 
20.
21.
                i++; 
22.
23.
        } catch (java.io.FileNotFoundException e) { 
24.
            e.printStackTrace();  //Fehler ausdrucken 
25.
        } catch (java.io.IOException e) { 
26.
            e.printStackTrace();  //Fehler ausdrucken 
27.
28.
29.
    public static void main(String args[]) { 
30.
        for(int i=0;i<24;i++) for(int j=0;j<24;j++) System.out.println(wallkoords[i][j]); 
31.
32.
}
Die Daten müssen in dem Fall so aussehen:
0,0,0,1, ...
1,1,0,0, ... usw.

Und noch viel Spass beim NetHack programmieren
Bitte warten ..
Mitglied: StonedSoul
02.02.2007 um 14:50 Uhr
Jawohl Heureka, das is es!! Many thx! es klappt!
was mich gleich zu einem neuen Problem führt:
1. Ich versteh den Code net ganz und
2. Lässt sich des irgendwie einrichten, dass man alle 20 Arrays in einer Datei speichert und das Programm, je nach einem best. Variablenwert nur die Daten leist, die in der Zeile 100 - 125 stehen?

zu 1:

public class Test_Array {
static int [][] wallkoords;
static {
java.lang.String sTemp;
java.lang.String Datei;
int level=1;
Datei="Levels/Level"+level+".txt";
int i,j;
wallkoords = new int [25][25];
// Datei öffnen
java.io.BufferedReader oReader = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(new java.io.File(Datei)))); <-- Was genau macht diese Zeile?? (ich weiß, datei öffnen, aber wie?) Das mit der Variabeln "Datei" funktioniert.
// Zeile für Zeile einlesen
i=0;
while ((sTemp = oReader.readLine()) != null) { <-- Was genau macht diese Zeile?? Was heißt dieses "ungleich null"
// Zeile in Einzelteile zerlegen (wir trennen durch ,)
java.util.StringTokenizer stWerte = new java.util.StringTokenizer(sTemp,",");
j=0;
// Nun eintragen in den Array. Es wird nicht überprüft, ob die Grenzen überschritten werden!
while(stWerte.hasMoreTokens()) {
wallkoords[i][j] = java.lang.Integer.parseInt(stWerte.nextToken()); Was macht stWerte.nextToken() ???
j++;
}
i++;
}
}

}
ach ja nochwas formales: wie hat du des mit dem kasten gemacht, is des als zitat oda wie? find ich irgendwie übersichtlicher...
Bitte warten ..
Mitglied: AndreasHoster
02.02.2007 um 22:45 Uhr
Zu den Formatierungen: https://www.administrator.de/index.php?mod=faq_detail&idx=format

Dann versuchen wir mal Licht ins Dunkel zu bringen:
Die lange Zeile mit dem BufferedReader könnte man auch in mehreren Zeilen schreiben, aber das ist nicht nötig.
new java.io.File(Dateiname) erzeugt ein neues Fileobjekt
new java.io.FileInputStream(Fileobjekt) erzeugt ein Eingabestream aus der File
new java.io.InputStreamReader(InputStream) erzeugt einen Reader aus dem Eingabestream
new java.io.BufferedReader(StreamReader) erzeugt dann den BufferedReader, den wir benutzen.
Das zwischendrin sind sozusagen nur Hilfsklassen, um es hinterher möglichst komfortabel lesen zu können.

sTemp = oReader.readLine() ließt eine Zeile aus der Datei ein.
!= null prüft, ob das eingelesene ungleich null ist, null bedeutet nicht initialisiert, d.h. damit kriege ich das Dateiende raus. Eine leere Zeile gibt nämlich nicht null, sondern den Leerstring "".

Der Stringtokenizer zerlegt einen String an den angegebenen Trennzeichen (hier ,), .nextToken gibt einfach den nächsten durch das Trennzeichen getrennten Wert zurück.

Man kann sicherlich auch alles in eine Datei packen, allerdings müsstest Du beim Einlesen dann irgendwie nachkontrollieren, ob die Zeile die man einliest jetzt die richtige ist. Ich würde es in einzelne Dateien packen.
Bitte warten ..
Mitglied: StonedSoul
03.02.2007 um 14:50 Uhr
okay, vielen Dank , ich habs einigermasen gerafft. Dann mach ich das in mehrern Dateien, man muss es ja net unbedingt alles verkomplizieren ^^
Bitte warten ..
Mitglied: Hamai1001
25.08.2017 um 19:09 Uhr
könntest du vielleicht deine ganze Klasse hierherschreiben. Habe ein ähnliches Problem danke im Vorraus ^-^
Bitte warten ..
Mitglied: Hamai1001
25.08.2017 um 19:11 Uhr
könntest du mir vielleicht helfen bei mir funktioniert das alles hier nicht ^^
Bitte warten ..
Mitglied: Hamai1001
25.08.2017 um 19:12 Uhr
public class Boot {

public Boot() {

BeginSession();

int[][]map = helper.Test_Array.map;

TileGrid grid = new TileGrid(map);
Player player = new Player(grid);
while(!Display.isCloseRequested()) {
Clock.update();


grid.Draw();
player.Update();

Display.update();
Display.sync(60);

}

Display.destroy();

}

public static void main(String[] args) {
new Boot();
new Spliter();
new JMenuItemBeispiel();
}
}
Bitte warten ..
Mitglied: Hamai1001
25.08.2017 um 19:15 Uhr
public class Test_Array {

public static int [][] map;

static {

java.lang.String sTemp;

int i,j;

map = new int [20][15];

try {

Datei öffnen

java.io.BufferedReader oReader = new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(new java.io.File("res/Map2.txt"))));

Zeile für Zeile einlesen

i=0;

while ((sTemp = oReader.readLine()) != null) {

Zeile in Einzelteile zerlegen (wir trennen durch ,

java.util.StringTokenizer stWerte = new java.util.StringTokenizer(sTemp,",");

j=0;

Nun eintragen in den Array. Es wird nicht überprüft, ob die Grenzen überschritten werden!

while(stWerte.hasMoreTokens()) {

map[i][j] = java.lang.Integer.parseInt(stWerte.nextToken());

j++;

}

i++;

}

} catch (java.io.FileNotFoundException e) {

e.printStackTrace(); Fehler ausdrucken

} catch (java.io.IOException e) {

e.printStackTrace();
Fehler ausdrucken

}

}

public static void main(String args[]) {

for(int i=0;i<24;i++) for(int j=0;j<24;j++) System.out.println(map[i][j]);

}

}
Bitte warten ..
Mitglied: Hamai1001
25.08.2017 um 19:15 Uhr
Exception in thread "main" java.lang.ExceptionInInitializerError
at data.Boot.<init>(Boot.java:36)
at data.Boot.main(Boot.java:57)
Caused by: java.lang.NumberFormatException: For input string: "{0"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at helper.Test_Array.<clinit>(Test_Array.java:37)
... 2 more
Bitte warten ..
Mitglied: AndreasHoster
28.08.2017 um 08:01 Uhr
Sich an einen 10 Jahre alten Thread dranzuhängen ist nur bedingt sinnvoll, wenn die, die damals geantwortet haben nicht mehr dabei wären, würde es niemand mehr sehen (es wird hier nach Erstellungsdatum des Threads sortiert, nicht nach dem letzten Post dazu),

Aber um auf das Problem zurückzukommen:
Die Fehlermeldung sagt doch eigentlich alles aus:
Caused by: java.lang.NumberFormatException: For input string: "{0"
{0 lässt sich nicht in eine Zahl konvertieren, denn was soll er mit { machen?

Also in der Eingabedatei die {} weglassen.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Powershell - zeilenweise Variablen aus TXT Datei einlesen

gelöst Frage von adm2015Batch & Shell12 Kommentare

Hallo, ich habe folgendes Problem. Ich möchte meinen alten Batch Code in Powershell verwenden und finde keinen passenden Lösungsansatz. ...

Batch & Shell

Mehrere txt Dateien einlesen und letzte Zeile löschen

gelöst Frage von THRILLERBatch & Shell1 Kommentar

Hallo Gemeinde, ich beschäftige mich mit folgendem Problem. Und zwar will ich aus einem Ordner mehrere Dateien einlesen und ...

VB for Applications

Messwerte aus mehreren .txt Dateien in eine Exceltabelle einlesen

gelöst Frage von arotcivVB for Applications6 Kommentare

Ich quäle mich seit Tagen mit gefährlichem Halbwissen um Codes die hier bereitgestellt wurden so abzuändern, dass ich zwei ...

VB for Applications

Einlesen von Txt-Dateien mit unterschiedlichen Trennern mit Excel VBA

gelöst Frage von mhsk97VB for Applications12 Kommentare

Hallo Wissende, ich habe eine Textdatei mit unterschiedlichen Trennern vorliegen die ich über ein Excelmakro einlesen und schlußendlich als ...

Neue Wissensbeiträge
Verschlüsselung & Zertifikate
Meine Wissenssammlung zu Bitlocker
Erfahrungsbericht von DerWoWusste vor 22 StundenVerschlüsselung & Zertifikate2 Kommentare

Die Motivation für diesen Beitrag waren die vielen Posts rund um dieses Thema, die deutlich machen, wie viele Einzelaspekte ...

E-Mail
Email-Apps und Verhalten bei Pop3
Erfahrungsbericht von kfranzk vor 2 TagenE-Mail11 Kommentare

Hallo Freunde, da mir mein diesbezüglicher Faden als gelöst markiert wurde, muss ich hier neu aufsetzen. Ich arbeite bewusst ...

Hyper-V

Optimiertes Ubuntu per Microsoft Hyper-V-Schnellerstellung verfügbar

Anleitung von Frank vor 3 TagenHyper-V1 Kommentar

Für Microsofts Virtualisierungssoftware Hyper-V ist ab sofort auch ein optimiertes Ubuntu 18.04.1 LTS verfügbar. In der "Hyper-V-Schnellerstellung" App, die ...

Sicherheits-Tools

Trend Micro WorryFree Business Security (WFBS) 10 - neuer Patch 1470 verfügbar

Tipp von VGem-e vor 3 TagenSicherheits-Tools2 Kommentare

Servus, mal sehen, ob mit Patch 1470, zu finden unter dann die angeblich fehlerhafte Funktion, die unter W10 im ...

Heiß diskutierte Inhalte
Datenschutz
Gilt ein Ransomware-Befall als Datenpanne nach DSGVO?
Frage von MOS6581Datenschutz22 Kommentare

Moin Kollegen, wenn sich jemand Ransomware einfängt und dadurch bspw. Kundendaten verschlüsselt werden; gilt dies dann als meldepflichtige Datenpanne ...

Hardware
Sophos SG135 - Routing
Frage von Xaero1982Hardware16 Kommentare

Moin Zusammen, ich ersetze gerade nen alten Cisco DualWAN Router durch eine SG 135. Ich muss bestimmte Ziele über ...

Netzwerke
Hilfe bei der Planung meines Heimnetzwerks
Frage von DHD082Netzwerke15 Kommentare

Hallo zusammen, wir bauen gerade ein Einfamilienhaus, welches ich mit einem Heimnetzwerk ausstatten möchte. Da ich zwar auch in ...

Tipps & Tricks
Nagstamon und PRTG Monitoring
Frage von Der.ITlerTipps & Tricks13 Kommentare

Hallo Ihr, heute am Sonntag bin ich mal früh aufgestanden um mich mit dem Problem von Gestern zu beschäftigen. ...