Stránka 1 z 1

[JAVA] - Nacitani vstupu pomoci System.in.read()

Odeslat příspěvekNapsal: 27. 12. 2006 18:49
od Zdářa
Zdravim, mám takovej menší problém s načítáním. Tak jak je to napsany to funguje, ale je tu menší háček. Když se zadá chybný vstup, tak to správně vyhodí vyjímku a cyklus se opakuje, což je dobře, ale když to podruhé najede na to načítání tak se program nezastaví, ale načte si tam nějaky hodnoty sám, což teda nechápu co je zač. No a tím pádem to jde zase do vyjímky a cyklus se začna zase opakovat ale tentokrát(na 2. pokus) se to už zastaví. Nevíte někdo v čem by mohl být problém?

Jen tak pro info: načítá to 2 čísla tahu na šachovnici ve vymezenym rozsahu 0-8. Zřejmě to načítání bude asi začátečnickým zpusobem napsany, ale berte ohled na to, že já jím jsem :wink:

Kód: Vybrat vše
   //   nacti tah
    public void nactiTah(String text)
   {
      final int length = 2;
      byte pole[] = new byte[length];
      boolean ok = false;
      String strX = "";
      String strY = "";
      int x;
      int y;
      
      while(ok == false)
        {
         System.out.print("Zadej souradnice " + text);
         
           try
           {
               System.in.read(pole);           
              strX += (char)pole[0];
              x = Integer.parseInt(strX);   
              strY += (char)pole[1];
              y = Integer.parseInt(strY); 
           }
           catch(NumberFormatException e)
           {
              System.out.println("Zadavej jenom cisla, vole!");
              strX = "";
              strY = "";
              continue;
           }
           catch(Exception e)
           {
              System.out.println("Chyba na vstupu, vole!");
              strX = "";
              strY = "";
              continue;
           }

           if((x < 0) || (x > 7) || (y < 0) || (y > 7))
           {
              System.out.println("CHYBA: Zadejte 2 cisla v rozsahu 0-7!");
              strX = "";
              strY = "";
              continue;
           }
           else
           {
              mX = x;
              mY = y;
              ok = true;
           }   
        }
   }

Odeslat příspěvekNapsal: 27. 12. 2006 22:29
od Nargon
Nejsem Javar, ale pravdepodobne mas problem s tim ze si ten vstupni stream pamatuje co jsi tam zadal.
Tedy ty zadavas do 2bajtovyho bufferu. Takze tam nactes 2 znaky.
Problem je, ze kdyz napises: "15"[enter] tak i ten enter se tam vlozi v pripade windows jsou enter 2 znaky s kodem 13,10 v unixu je to myslim jen ta 13ka.
A kdyz tam zadas 99345 tak to napoprvy vezme 99, a oznami chybu, ze je to vetsi nez 7, pak to vezme 34 (a ani se te to nepta na zadani cisel) atd.

Takze by mohlo pomoci, aby jsi po kazdym nacitani ten buffer vyprazdnil.
Takze udelat asi tohle:
Kód: Vybrat vše
System.in.read(pole);   
System.in.read(new byte[System.in.available()]);

to by melo precist a zahodit ten zbytek dat co tam zadas.
Bude to fungovat pokud budes zadavat data z klavesnice. Jakmile jako vstup presmerujes treba soubor, nebo nejakej jinej stream tak je problem. Nacte to prvni dva byty a zbytek to jen zahodi.

Odeslat příspěvekNapsal: 28. 12. 2006 17:35
od Zdářa
fakt díky, dělá to přesně to co říkáš - načte si to 13 a 10... Už to funguje jak má s tím vyprázdněním bufferu...
máš pak u mě pivko :)