Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno zastavi se na spatnem radku

zdravim vas, potrebuju se zeptat, jak vyresit problem s nacitanim cisel v jave z txt... mam txt s cisly v radkach a uprostred je schvalne chyba, ze tam neni cislo typu int, ale tohle: 5o7, takze je v tom znak, me to do pole nacte vsechna cisla nad timto radkem a jakmile to narazi na tenhle, ulozi to 0 a do konce txt to uklada same 0. potreboval bych, aby to tenhle radek preskocilo (nebo tedy dosadilo tedy 0) a ve zbytku cisel (radku) pokracovalo v nacitani....diky moc...

tady mam kod:

import java.util.*;
import java.io.*;
public class Hory
{
    private int[] poleCisel;
    
    public void nactiCisla(String nazevSouboru)
    {
        int i = 0;
        poleCisel = new int [20];
        File f = new File(nazevSouboru);
        Scanner sc = null;
        try
        {
            sc = new Scanner(f);
            while(sc.hasNextInt())
            {
                poleCisel[i] = sc.nextInt();
                i++;
            }
        }
        catch(FileNotFoundException e)
        {
            System.out.println("Soubor nelze nalezt");
        }
    }
}

jsem docela zacatecnik, tak prosim co nejjednoduseji vysvetlit, dekuju

Předmět Autor Datum
V podmienke cyklu while kontroluješ, či je ďalší token číslo. Ak nie je, tak cyklus skončí a teda na…
los 08.01.2010 21:58
los
Diky za reakci, ale nefunguje, porad stejny problem - nic se nezmenilo...:(
opick4 08.01.2010 22:49
opick4
Fungovat by to malo takze robis nieco blbo P.S> vsimnut si ze hasNext neni to iste co hasNextInt
MM.. 08.01.2010 23:06
MM..
Odkrokuj si svoj program pomocou debuggera a uvidíš, kde máš chybu.
los 08.01.2010 23:32
los
http://chortle.ccsu.edu/java5/Notes/chap23/ch23_6. html The hasNextInt() method returns true if the…
MM.. 08.01.2010 21:58
MM..
Zjistuji, ze neumet anglicky je vetsi a vetsi problem... nebo mi spis znalosti nestaci :( ale zpet…
opick4 08.01.2010 22:52
opick4
riesi to tvoj problem. Ked nevies anglicky tak si to drbni aspon do translate.google.com P.S. alebo…
MM.. 08.01.2010 23:02
MM..
ten preklad z googlu se da pochopit jen castecne... promin, ale proste mi to neni moc jasny... mysl…
opick4 08.01.2010 23:22
opick4
ten java scanner cita sekvencne tak nemozes skakat kde ta napadne. Jak sa to da robit ti uz napisal…
MM.. 08.01.2010 23:26
MM..
zacinam tomu pomalu prichazet na kloub, ale potrebuju, jestli bys mi nepopsal funkci toho ifu... ja…
opick4 08.01.2010 23:34
opick4
je v tom rozdiel...ak podmienka z prveho ifu vrati false, ide sa na tu podmienku v dalsom ife resp.…
wam_Spider007 08.01.2010 23:43
wam_Spider007
if = ak (jestli) else = inak (jinak) if(A) PRIKAZ1 else if(B) PRIKAZ2 else PRIKAZ3 je: ak(A) poto…
MM.. 08.01.2010 23:43
MM..
takze to bude porad preskakovat na dalsi else if, dokud to proste nebude platit... diky
opick4 08.01.2010 23:55
opick4
resp. ked chapes if(P){}else{} tak musis chapat aj if(P){}else{ if(P2){}else{} } to je to iste ako…
MM.. 08.01.2010 23:47
MM..
jo jasny, tohle uz viim :-) tak to jo, díky :-) poslední
opick4 08.01.2010 23:56
opick4

V podmienke cyklu while kontroluješ, či je ďalší token číslo. Ak nie je, tak cyklus skončí a teda nasledujúce riadky sa už nespracúvajú, takže tam zostanú nuly.

Opraviť to môžeš tak, že v podmienke cyklu budeš kontrolovať iba to, či je k dispozícii ďalší token a až vnútri cyklu sa na základe toho, či je to číslo alebo nie, rozhodneš, čo spravíš - ak je to číslo, tak ho zapíšeš do poľa, inak sa posunieš na ďalší token. Mohlo by to vyzerať nejako takto (netestované):

while (sc.hasNext())
  if (sc.hasNextInt())
    poleCisel[i++] = sc.nextInt();
  else
    sc.next();

http://chortle.ccsu.edu/java5/Notes/chap23/ch23_6. html

The hasNextInt() method returns true if the next set of characters in the input stream can be read in as an int. If they can't be read as an int, or if the end of the file has been reached, then it returns false

Takze to co pises neni pravda. ked to pride na znak ktory neni cislo tak to skonci (lebo hasNextInt vrati FALSE) a teda nedava to ziadne dalsie 0 do pola cisel.

Ked chces aby to preskakovalo znaky tak musis cyklus while urobit zlozitejsi, napr. inspiracia tu
http://www.java2s.com/Code/JavaAPI/java.util/Scann erhasNextInt.htm

Pouzivaj nejaku java referenciu alebo google, ked si nacpes do programu nejaku funkciu tak je nutne si precitat k nej referenciu aby si presne vedel co ti ta funkcia (a teda aj program) bude robit pri roznych (trebars aj chybnych) vstupoch. Nielen lepit to jak cierne skrinky.

P.S. a tvoj program ma IMHO dost vazny problem ak bude mat vstup viac ako 20 riadkov (v C by to bola zavazna bezpecnostna diera)

riesi to tvoj problem. Ked nevies anglicky tak si to drbni aspon do translate.google.com
P.S. alebo aspon trochu uvazuj, to sa da aj bez anglictiny. Ked hasNextInt vrati false tak musis vybrat ten "zavadny" znak zo vstupu niecim inym, sam od seba sa ten znak zo vstupu nevypari.

ten preklad z googlu se da pochopit jen castecne...
promin, ale proste mi to neni moc jasny...

myslel jsem ale, ze by to mohlo jit vyresit tak, ze budou 2 while cykly, jeden bude zapisovat do radku s chybou a pak druhy do toho sameho pole, od policka kde skoncil prvni cyklus a od dalsi radky, pod chybnym radkem...
ale nevim, jak treba udelat, aby to zaclo cist az od toho napr. 7. radku, kdyz 6. je vadny...

ten java scanner cita sekvencne tak nemozes skakat kde ta napadne.
Jak sa to da robit ti uz napisal los vyssie. Je to vpodstate to same ako na co som dal ja link, akurat zjednodusene o ten boolean ktory ti netreba. A urcite to funguje. Ked ti to nejde tak si to asi aj blbo opisal :)

if = ak (jestli)
else = inak (jinak)

if(A)
PRIKAZ1
else if(B)
PRIKAZ2
else
PRIKAZ3

je:

ak(A) potom
PRIKAZ1
inak (t.j. ked nebolo splnene A) ak(B) potom
PRIKAZ2
inak (t.j. ak nebolo splnene ani A ani B)
PRIKAZ3

zatvorky sa pouzivaju ak napr. PRIKAZ1 je zlozeny z viac prikazov. Zatvorky mozes pouzit aj pre jeden prikaz, v tom pripade je to fuk ci ich tam das alebo nie. Preto los nedaval zatvorky ptz tam ma len jeden prikaz. Ked tam pridas dalsi prikaz napr. i++; osobitne tak musis uzavret sadu prikazov patriace pod if do zatvoriek { } .

Zpět do poradny Odpovědět na původní otázku Nahoru