Avatar billede aslan Nybegynder
26. marts 2002 - 15:07 Der er 17 kommentarer og
3 løsninger

løkke problem

ok  jeg har dette:
boolean open = true;
while(open)
{
String reader = fileIn.readString();

if(reader.equals("{"))
{
open=false;
}
else
{
fileWrite.println(reader);
}
}


løkken stopper når reader møder { men hvordan får jeg open = true til at virke sådan så løkken køre videre når den møder } ??
Avatar billede carstenknudsen Nybegynder
26. marts 2002 - 15:27 #1
Den kører da videre når den møder
en "}" som det er nu?
Avatar billede aslan Nybegynder
26. marts 2002 - 15:47 #2
nej det gør den desvære ikke løkken stopper og det skulle den helst ikke gøre!
Avatar billede disky Nybegynder
26. marts 2002 - 16:21 #3
farlig måde at læse fra en fil på, du får en IOException når du rammer enden af filen.
Avatar billede aslan Nybegynder
26. marts 2002 - 16:26 #4
bare rolig det har jeg taget forbehold for jeg har nemlig try{}catch (EOFException e){} omkring løkken!
Avatar billede aslan Nybegynder
26. marts 2002 - 16:27 #5
Men sig mig er der ikke en måde det kan gøres på?
Avatar billede aslan Nybegynder
26. marts 2002 - 16:28 #6
Og glemte at sige så har jeg throws IOException på contructoren
Avatar billede carstenknudsen Nybegynder
26. marts 2002 - 16:29 #7
Jamen er det så ikke bare fordi der kastes
en IOException som du bare ikke får skrevet
ud. Der skal mere kode til for at afgøre det.
Avatar billede aslan Nybegynder
26. marts 2002 - 16:33 #8
import javagently.*;
import java.io.*;

class ReadText
{
    Stream fileIn = new Stream("text.dat",Stream.READ);
    Stream fileWrite = new Stream("redigeret.dat",Stream.WRITE);

    boolean open=true;

    ReadText()throws IOException
    {

      try
      {

          while(open)
          {
            String reader = fileIn.readString();

              if(reader.equals("{"))
              {
              open=false;
              }
              else
              {
              fileWrite.println(reader);
              }
              }

      }
      catch (EOFException e){}



    }
    public static void main(String[] aslan)throws IOException
    {
        new ReadText();
    }

}
Avatar billede carstenknudsen Nybegynder
26. marts 2002 - 16:42 #9
Du må få læst hele filen igennem
og så bliver der kastet en IOException,
men den fanger du selv og derfor
bliver du ikke gjort opmærksom på det.
Avatar billede carstenknudsen Nybegynder
26. marts 2002 - 16:45 #10
Iøvrigt hvis du selv vil fange
en exception så behøver du ikke
at erklære den, du skal blot ændre
dit catch til catch (IOException ioe) {}
og så gøre hvad der skal til, men i
dette tilfælde er det nok bedst ikke at
fange noget overhovedet.
Avatar billede aslan Nybegynder
26. marts 2002 - 16:46 #11
Jamen hvordan skulle jeg ellers køre hele filen igennem uden try{}catch (EOFException e){} ??
Avatar billede carstenknudsen Nybegynder
26. marts 2002 - 16:50 #12
Hvis du vil læse en tekst fil igennem
så er dette en god fremgangsmåde:
FileReader fr = new FileReader( "minfil" );
BufferedReader r = new BufferedReader( fr );
String s;
while ( ( s = r.readLine() ) != null ) {
// gør noget med den linie du lige har læst
}
r.close();
Avatar billede aslan Nybegynder
26. marts 2002 - 20:01 #13
ok inden i alle sammen hidser jer op:)så se lige på hvad jeg er kommer frem til:
          boolean open=true;
          while(open)
          {
            String reader = fileIn.readString();

              if(reader.equals("stop")) break;

              else if(reader.equals("{")) open=false;

              else if(reader.equals("}")) open=true;

              if(open) fileWrite.println(reader);
      }


Dette er så teksten jeg læser fra text.dat:

Sample input
This is the same length
as the comment { This
assured comment is the
same length as the }
rest assured { And so stop


Dette er så output redigeret.dat:

Sample
input
This
is
the
same
length
as
the
comment

Som i kan se mangler jeg stadig de to ord : rest assured

Nogen ideer? Og jeg har droppet try{}catch (EOFException e){}
Avatar billede guldner Nybegynder
26. marts 2002 - 21:05 #14
Jeg vil ikke udtale mig om din måde at læse filen på, men jeg vil forsøge at hjælpe med det du har.
Problemet er at du bruger den samme boolean (open) til at styre om du skal skrive ud og om du skal fortsætte løkken. Du må holde de to ting adskilt. Som jeg forstår det du skriver ønsker du at genoptage udskrivningen når du læser et '}'.
Prøv med dette:

boolean open=true;
while(true)
{
  String reader = fileIn.readString();
  if(reader.equals("stop")) break;
  else if(reader.equals("{")) open=false;
  else if(reader.equals("}")) open=true;
  if(open) fileWrite.println(reader);
}

Men bemærk! Det er ikke smart at din kode forlader sig på at der sidst i filen står "stop". (Så fik jeg udtalt mig alligevel) Prøv at kigge lidt på eksemplet i kommentaren fra Carsten Knudsen.
Avatar billede disky Nybegynder
26. marts 2002 - 21:10 #15
Man må IKKE bruge exception til sådanne noget !!!!!

Det strider imod al sund fornuft og god programmering
Avatar billede aslan Nybegynder
26. marts 2002 - 21:20 #16
Min lærer har ellers lært mig at man skal.. det samme gjorde den lære bog vi havde... javagently
Avatar billede guldner Nybegynder
26. marts 2002 - 21:21 #17
Enig. Jeg henviser mere præcist til Carsten Knudsens kommentar fra kl. 16:50:59
Avatar billede aslan Nybegynder
26. marts 2002 - 21:32 #18
Jeg er ikke helt med ... det han snakker om kan jeg ikke bruge i det her sammenhæng der jeg bruger pakken javagently
Avatar billede guldner Nybegynder
26. marts 2002 - 21:42 #19
Hvis du _skal_ bruge Stream fra javagently, så har du nok ret. Den lægger vist op til at man fanger en EOFException når filen er slut.
Avatar billede aslan Nybegynder
26. marts 2002 - 21:44 #20
Ok den endelige løsning efter så mange forsøg og kommentar fra hjælpsomme mennesker er:

while(true)
{
String reader = fileIn.readString();

if(reader.equals("stop")) break;

else if(reader.equals("{")) open=false;

else if(reader.equals("}")) open=true;

if(open && !reader.equals("}")) fileWrite.println(reader);
}

Tak allesammen det var lærerigt!
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