Avatar billede cp4_m Nybegynder
28. januar 2007 - 22:58 Der er 35 kommentarer og
1 løsning

Hvorfor kan min kode ikke læse symboler fra en txt fil, rigtigt.

Jeg kan ikke få mit program til at læse # rigtigt.
Min txt fil består kun af ( # , . ) men kan ikke få koden til at opfatte ("#") rigtigt. Hvad er der galt ???

Jeg har includeret mine imports og den del af koden hvor det går galt. Den kommer ind i den indereste "while(x > linelength)"-lykke, men jeg får kun 0'er i min matrix... hvorfor ???                   

mine imports:
        import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.border.*;
    import java.io.File;
    import java.util.StringTokenizer;
    import java.io.*;
    import java.net.*;
    import java.util.*;

Koden:

public int[][] readFile (File file) {
     
        int[][] matrix = new int[ GA.GRIDY ][ GA.GRIDX ];
        try
        {
            StringBuffer sb = new StringBuffer("");
            BufferedReader in = new BufferedReader(new
            FileReader(file));
            String line;
            int lineCounter = 0;
           
      while(!(line = in.readLine()).startsWith("#"))
            {
              sb.append(line);
              sb.append(' ');
                   
          String tegn;
              int linelength = (int) line.length();
              int x = 0;
              while(x > linelength)                   
              {
                  tegn = line.substring(0,1);   
                  if(tegn.equals("#"))
                    {
                    matrix[lineCounter][x] = 1;
                    }
                  else
                    {
                    matrix[lineCounter][x] = 0;
                    }
                  line = line.substring(1);
                  x++;
              }
              lineCounter++;
            }
               
        }
    catch (IOException e){
    return null;
    }
    return matrix;   
      }
Avatar billede erikjacobsen Ekspert
28. januar 2007 - 23:22 #1
Hvad indeholder din txt-fil helt præcist? Hvad gør startsWith("#") for dig ?  mener du 0 i line.substring(0,1);  ?
Avatar billede erikjacobsen Ekspert
28. januar 2007 - 23:23 #2
Og mener du >  i  while(x > linelength)
Avatar billede winners79 Nybegynder
28. januar 2007 - 23:27 #3
Kommer kun ind i denne while løkke: "while(x > linelength)" hvis linelength er et negativt tal. så det du mener er nok:  "while(x < linelength)"
Avatar billede cp4_m Nybegynder
28. januar 2007 - 23:27 #4
erikjacobsen: Ja...
Og txt filen viser det den skal hvis man åbner den i et JTextArea.
Avatar billede winners79 Nybegynder
28. januar 2007 - 23:30 #5
kan se at erik også lagde mærke til det, sorry erik, din post var der ikke da jeg kiggede ind:)
Avatar billede erikjacobsen Ekspert
28. januar 2007 - 23:33 #6
"Ja..." til hvad ?
Avatar billede erikjacobsen Ekspert
28. januar 2007 - 23:34 #7
"txt filen viser det den skal" - det kan vi ikke bruge til noget. Vil du svare på de spørgsmål jeg stiller, så kan du måske få hjælp. Gider du ikke, så er jeg heldigvis ligeglad.... :)
Avatar billede cp4_m Nybegynder
28. januar 2007 - 23:36 #8
erik: skal jo lige prøve de ting du siger for at se om det hjælper, men lige meget om det er < eller > skriver matrixen kun 0'er.
Avatar billede erikjacobsen Ekspert
28. januar 2007 - 23:37 #9
Ja, det gør den nok. Men har du en mening selv om det skal være "<" eller ">" ? Eller hvad?
Avatar billede winners79 Nybegynder
28. januar 2007 - 23:39 #10
er dine "#" kun i starten af hver linie i din textfil?, hvis det er tilfældet vil de aldrig dukke op pga: while(!(line = in.readLine()).startsWith("#"))
Avatar billede cp4_m Nybegynder
28. januar 2007 - 23:45 #11
winners79: Nej, # danner væge i en labyrint og . er der man kan gå. Så der er # mange steder.

erik: Skal være " < " for linelength er jo længden på stringen line.
Avatar billede erikjacobsen Ekspert
28. januar 2007 - 23:46 #12
Ja, det skal være "<". Vi mangler stadig at se hvad din textfil indeholder præcist, hvad også winners79 spørger efter.
Avatar billede cp4_m Nybegynder
28. januar 2007 - 23:47 #13
txt fil:
##############################
#...........#................#
#...........#................#
#.....#.....#................#
#.....#.....#........###...###
#.....#..............#.......#
#.....#..............#.......#
#.....#..............#.......#
#.....################.......#
#............................#
#............................#
##############.....###########
#...........#................#
#...........#.......#........#
#...................#........#
#.....###################....#
#............................#
#.......#...............#....#
#.......#...............#....#
#####...#....#################
#.......#....................#
#.......#....................#
#.......#....................#
#....#######...###############
#............................#
#............................#
#....###############.........#
#..................#.........#
#..................#.........#
##############################
Avatar billede erikjacobsen Ekspert
28. januar 2007 - 23:49 #14
Så vil jeg gentage hvad jeg skrev i starten: Hvad gør startsWith("#") for dig ?
Hvorfor står den der?
Avatar billede cp4_m Nybegynder
28. januar 2007 - 23:49 #15
skal indlæses i en 30 * 30 matrix af en labyrint. (GA.GRIDY og GA.GRIDX er sat til 30)
Avatar billede cp4_m Nybegynder
28. januar 2007 - 23:59 #16
erik: startWith("#") er noget jeg har fra en gammel kode, uden det giver den bare vild mange fejl. Men kan ikke helt huske hvad det står for.

line.substring(0,1); giver mig det første symbol i stringen og line = line.substring(1); fjerner så det første symbol efter det er blevet brugt.
Avatar billede erikjacobsen Ekspert
29. januar 2007 - 00:01 #17
Det med line og substring er ok - ikke så effektivt, men det virker nok.

Det med startsWith("#") skal du nok tænke lidt over. Der er ikke meget fidus i at skrive af fra noget gammel kode, uden at have nogen anelse om hvorfor.
Avatar billede cp4_m Nybegynder
29. januar 2007 - 00:05 #18
erik: nej, det ved jeg godt... det er altid en god regel. Men ved at det virkede rigtig i den gamle kode og min matrix bliver fyld, bare kun o'er og det passer jo ikke lige med txt filen.
Avatar billede winners79 Nybegynder
29. januar 2007 - 00:08 #19
har lige testet den, den kom aldrig ind i den første lukke, og grunden til at du troede den blev fyldt med 0, er nok fordi det er "start" værdien i array'et

Din while løkke: while (!(line = in.readLine()).startsWith("#")) {

skal være:     while ((line = in.readLine()).startsWith("#")) {
(fjernet: !)

desuden skal
while(x > linelength)     

være
while(x < linelength)
Avatar billede erikjacobsen Ekspert
29. januar 2007 - 00:09 #20
Men programmet gør hvad du be'r det om. Det ligner en skoleopgave, og jeg vil ikke bare sådan lige give dig løsningen. Du har arbejdet dig fint frem mod det der er nu, og du mangler kun den sidste "knast", så vidt jeg kan bedømme. Og du har fået nogle spor at gå efter. Det er vist sengetid her ;)
Avatar billede erikjacobsen Ekspert
29. januar 2007 - 00:10 #21
Ok - det er lidt et hack bare at fjerne "!" - ved du hvorfor???
Men du kan da komme videre nu, ik'?
Avatar billede winners79 Nybegynder
29. januar 2007 - 00:15 #22
ja, men lyder som om du snakker til cp4 og ikke mig, så vil lade ham svare:)
Avatar billede cp4_m Nybegynder
29. januar 2007 - 00:16 #23
erik: Det virker ikke at fjerne "!" så får jeg ikke nogle matrix.
Avatar billede cp4_m Nybegynder
29. januar 2007 - 00:19 #24
Ups. det var vist winners79 istedet.
Avatar billede winners79 Nybegynder
29. januar 2007 - 00:26 #25
jeg tror jeg vil lytte til Eric og lade dig lave dine lektier selv:) bedste måde at lære på
Avatar billede cp4_m Nybegynder
29. januar 2007 - 00:28 #26
winners79: kommer jo kun her når der er noget jeg slet ikke kan finde en løsning på.
Avatar billede winners79 Nybegynder
29. januar 2007 - 00:34 #27
prøv at test den her:

public int[][] readFile() {
        System.out.println("test");
        int[][] matrix = new int[100][100];
        try {
            StringBuffer sb = new StringBuffer("");
            BufferedReader in = new BufferedReader(new FileReader(new File("c:/fil.txt")));
            String line;
            int lineCounter = 0;

            while ((line = in.readLine()) != null) {
                System.out.println("test2");
                sb.append(line);
                sb.append(' ');

                String tegn;
                int linelength = (int) line.length();
                int x = 0;
                while (x < linelength) {
                    tegn = line.substring(0, 1);
                    if (tegn.equals("#")) {
                        matrix[lineCounter][x] = 1;
                        System.out.println(1);
                    } else {
                        matrix[lineCounter][x] = 0;
                        System.out.println(0);
                    }
                    line = line.substring(1);
                    x++;
                }
                lineCounter++;
            }

        } catch (IOException e) {
            System.out.println("fejl");
        }
        return matrix;
    }
Avatar billede cp4_m Nybegynder
29. januar 2007 - 00:44 #28
winners79: den skriver kun den første "test" ud.
Avatar billede cp4_m Nybegynder
29. januar 2007 - 00:51 #29
winners79: skulle lige ændre den til den mappe min txt fil ligger i. så nu er det 1 "test" og 30 "test2". Matrisen er 0'er.
Avatar billede winners79 Nybegynder
29. januar 2007 - 00:53 #30
Check at "c:/fil.txt" peger på den rigtige fil
Avatar billede cp4_m Nybegynder
29. januar 2007 - 00:57 #31
winners79: Glemte lige en lille ting... skal lige fjerne out.print og se om det virker... men ser sådan ud.
Avatar billede cp4_m Nybegynder
29. januar 2007 - 01:00 #32
winners79: Da jeg er ny herinde har jeg kun et sidste spørgsmål... hvordan får du de 60 points som du har MEGET fortjænt ???
Avatar billede cp4_m Nybegynder
29. januar 2007 - 01:17 #33
Hvordan giver jeg winners79 de 60 points ?
er det at trykke på accepter eller hvad (har prøver.. det virkede ikke.)
Avatar billede erikjacobsen Ekspert
29. januar 2007 - 08:54 #34
Og så en ting mere ... hvad laver din StringBuffer sb ?
Avatar billede winners79 Nybegynder
29. januar 2007 - 13:18 #35
Det er først når der er givet et svar, som dette at du kan give point, dog syntes jeg at erik skulle have mindst halvdelen :)
Avatar billede erikjacobsen Ekspert
29. januar 2007 - 13:24 #36
Jeg samler slet ikke på point, tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester