Avatar billede xkda Nybegynder
29. oktober 2001 - 09:01 Der er 14 kommentarer og
1 løsning

Read input fra tastatur

Jeg kan ikke få flg. program til at virke. Det skal læse input fra tastaturet indtil der trykkes retur. Herefter skal input skrives til skærm i omvendt rækkefølge, men intet bliver skrevet ud. Kan i se fejlen?

import java.io.*;

class fejl extends Throwable
{
  public void besked()
  {
    System.out.println(\"Oops. You entered too many chars!\");
  }
}

public class readKeyb
{
  public static void main(String args[]) throws IOException
  {
    int i,j;
    char stak[] = new char[100];

    try {
      i=0;
      while ((stak[i] = (char) System.in.read()) != 13)
      {
        i = i+1;
        if (i>=0) throw new fejl();
      }

      for (j=i; j>=0; j=j-1)
        System.out.print(stak[j]);
    }

    catch (fejl f)
    {
      f.besked();
    }

    finally
    {
    }
  }
}
Avatar billede disky Nybegynder
29. oktober 2001 - 09:37 #1
Hvorfor throw\'er du en fejl hvis folk har tastet noget ind ?
Avatar billede xkda Nybegynder
29. oktober 2001 - 09:49 #2
Oops. Der skal stå: if (i>=100) throw new fejl();
Det ændrer imidlertid ikke noget.
Avatar billede carstenknudsen Nybegynder
29. oktober 2001 - 09:53 #3
Det er en god ide at benytte et højere niveau af
input stream.  Jeg benytter næsten altid en
BufferedReader i stedet for at læse lav niveau.
BufferedReader lader dig læse en hel linie ad gangen:

InputStreamReader isreader = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(is);
String line = reader.readLine();
Avatar billede jakoba Nybegynder
29. oktober 2001 - 09:56 #4
skulle tallet 13 ikke også gøres til char i linien:
      while ((stak[i] = (char) System.in.read()) != (char)13)

mvh JakobA
Avatar billede disky Nybegynder
29. oktober 2001 - 10:01 #5
Her er en der virker som også anvender StringBuffer til det hårde arbejde :)

import java.io.*;

class fejl extends Throwable
{
    public void besked()
    {
        System.out.println(\"Oops. You entered too many chars!\");
    }
}

public class readKeyb
{
    public static void main(String args[]) throws IOException
    {
        int i,j;
       
        try
        {
            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            String line=\"\";
            boolean slut=false;
            while(!slut)
            {
                line = in.readLine();
                if (line.length()>=100) throw new fejl();
                if(line.equals(\"slut\"))
                {
                    slut=true;
                }
                else
                {
                    StringBuffer out=new StringBuffer(line);
                    out.reverse();
                    System.out.println(out.toString());
                }
            }

        }
       
        catch (fejl f)
        {
            f.besked();
        }
       
        finally
        {
        }
    }
}

Avatar billede xkda Nybegynder
29. oktober 2001 - 10:03 #6
Opgaven skal løses nogenlunde som vist. Vi har ikke lært om BufferedReader.
At ændre tallet 13 til char ændrer ikke noget problemet er der stadig.
Avatar billede jakoba Nybegynder
29. oktober 2001 - 10:07 #7
tested og OK   

import java.io.*;

class fejl extends Throwable
{
  public void besked()
  {
    System.out.println(\"Oops. You entered too many chars!\");
  }
}

public class readKeyb
{
  public static void main(String args[]) throws IOException
  {
    int i,j;
    char stak[] = new char[100];

    try {
      i=0;
      while ((stak[i] = (char) System.in.read()) != (char)13)
      {
        i = i+1;
        if (i>=99) { throw new fejl(); };  //99 er max ok index
      }

      for (j=i; j>=0; j=j-1)
        System.out.print(stak[j]);
    }

    catch (fejl f)
    {
      f.besked();
    }

    finally
    {
    }
  }
}
Avatar billede disky Nybegynder
29. oktober 2001 - 10:15 #8
xkda:

Hvorfor ikke udnytte sprogets muligheder ??
Avatar billede xkda Nybegynder
29. oktober 2001 - 10:25 #9
Jeg vil hjertens gerne udnytte sprogets muligheder, men opgaven er lidt bundet.
Avatar billede xkda Nybegynder
29. oktober 2001 - 10:33 #10
Til jakoba:
Fejlen lå i at jeg havde skrevet

if (i>=100) throw new fejl1();

og ikke

if (i>=100)
{
  throw new fejl1();
}

Er det rigtigt forstået?
Avatar billede disky Nybegynder
29. oktober 2001 - 10:33 #11
siger den specifikt at i ikke må bruge bedre ting ?
Avatar billede jakoba Nybegynder
29. oktober 2001 - 10:37 #12
Det er det eneste udover  (char)13  jeg har rettet. så det må være en af de 2.

Avatar billede disky Nybegynder
29. oktober 2001 - 10:38 #13
den med throw går ingen forskel ud over at det er pænere at bruge {} ved en if sætning
Avatar billede logical Nybegynder
29. oktober 2001 - 11:28 #14
Ret din betingelse til:

while ((stak[i] = (char)System.in.read()) != \'\\n\') {
}

Og gør mig den tjeneste at lade fejl arve fra Exception istedet for Throwable. Under Throwable bør der kun være Exception og Error, og du lave en exception.
Avatar billede logical Nybegynder
29. oktober 2001 - 11:28 #15
Ret din betingelse til:

while ((stak[i] = (char)System.in.read()) != \'\\n\') {
}

Og gør mig den tjeneste at lade fejl arve fra Exception istedet for Throwable. Under Throwable bør der kun være Exception og Error, og du lave en exception.
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