[java] - stand. vst. a výst.

C++, C#, Visual Basic, Delphi, Perl a ostatní

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod honnza 27. 12. 2006 14:09

Jsem úplná lama :( ... Chci zadat hodnoty pro dvě matice, ale po zadání čísel pro první mi opětovné zavolání funkce nedovolí zadat pro druhou. ( možná uzavření proudu... nevim)

Kód: Vybrat vše
import java.io.*;
public class Matice {
   String[] nacti()
   {   
      String[] smatice;
      smatice = new String[10];
      String s = "";
       BufferedReader r;
       int n = 1;
       r = new BufferedReader(new InputStreamReader(System.in));
       while (true)  {
         try {
          System.out.println("Zadejte " + n++ + " radek> "); 
           s = r.readLine();
           if (s == null)  {
             break;
           }
          
           System.out.println("napsal jste> " + s);
           smatice[n-2] = s;
          
         } catch (Exception e) {
           System.out.println("Chyba cteni!");
           break;
         }
       }

       return smatice;
   }
   public static void main(String[] args) {
      Matice M = new Matice();
      M.nacti();
      M.nacti();
   }
}
honnza
Junior

Odeslat příspěvekod schod 27. 12. 2006 14:22

NEzkousel jsem ten program, ale jen tak od oka, co kdyby jsi upravil main takhle
Kód: Vybrat vše
public static void main(String[] args) {
      Matice M = new Matice();
      M.nacti();
      Matice N = new Matice();
      N.nacti();
   }
schod
Junior
Uživatelský avatar

Odeslat příspěvekod honnza 27. 12. 2006 14:25

To bohužel taky nefunguje .
honnza
Junior

Odeslat příspěvekod Nargon 27. 12. 2006 14:46

Mno ja jsem to zkusil a me ten tvuj program funguje :)
Ale taky jsem to delal ve vistual studiu a J#, coz pravdepodobne bude java nejak zmrvena s .net :D
Ale zkopilovat i spustit to slo bez problemu.

Ale pokud je u tebe problem v tom nacitani, tak si udelej vlastni tridu na nacitani a tam se ti bude uchovavat ten streamreader.
Kód: Vybrat vše
public class Nacitac
{
   private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
   public static String readLine()
   {
      try
      {
         return br.readLine();
      }
      catch (Exception e)
      {
         System.out.println("Chyba cteni!");
         return null;
      }
   }
}


A pak upravit to nacitani:
s = Nacitac.readLine();

Pokud je opravdu chyba nekde v tom uzavirani streamu, tak tohle to mozna vyresi, protoze tady se to nezavira.
Nargon
Moderátor

Odeslat příspěvekod honnza 28. 12. 2006 13:42

on "funguje", ve smyslu že jde spustit.... ale pokud ukončím zadávání pomocí CTRL+Z, a zavolám funkci znovu, tak už mě to nedovlí nic zadat a netuším čím to "povolit"... toť můj problém
honnza
Junior

Odeslat příspěvekod PaLaDiN 28. 12. 2006 16:39

v C++ je to metoda Clear() istreamu ... cize nieco podobne by malo aj v jave existovat ;)
PaLaDiN
Junior
Uživatelský avatar

Odeslat příspěvekod tekto 2. 1. 2007 14:25

Ja bych tipoval, že to asi ani nepůjde. Ctrl+Z si zavřel vstupní proud a není kam zadávat data...
Nepamatuju se, že bych bych viděl program, který by po uzavření stdin znova otevíral. Ale možná sem se jen špatně díval :)
tekto
Kolemjdoucí

Odeslat příspěvekod Nargon 2. 1. 2007 17:53

Kdyztak stdin ma tusim metodu .reset() cimz by jsis mohl ten stream sam znovu otevrit. ale jistej si tim nejsem.
Desktop: Ryzen 7 1800X (3.95GHz, 1.35V), Asus Crosshair VI Hero, 16GB DDR4 Ram (3200MHz), 128GB SSD + 3TB HDD, Nvidia GTX 1080
Notebook: Asus UL50VT 15.6" (SU7300@1.7GHz, 4GB ram, 500GB HDD, Intel GMA 4500MHD + nVidia G210M, dlouha vydrz cca 7+ hod)
Nargon
Moderátor

Odeslat příspěvekod Benjamin 2. 1. 2007 19:36

A dava to vubec smysl?
Prirozene (a bezne) prece je, ze uzavreni stdin znamena, ze je konec, a zadne dalsi vstupy uz nebudou.
Umělá inteligence není soupeř pro přirozenou hloupost.
Benjamin
Junior
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků