Avatar
Benjibs
Člen
Avatar
Benjibs:

Čítal som, vraj používanie 'while(true)' je 'bad practice'.
Existuje v tomto prípade, nejaká lepšia alternatíva:
http://www.itnetwork.cz/dev-lighter/125
Účelom metódy je vrátit validné číslo.
Zdalo sa mi úplne nezmyselné kvôli tomu zakladať premennú.

Odpovědět 24.6.2013 19:40
1 + 1 = 2
Avatar
Homo
Člen
Avatar
Odpovídá na Benjibs
Homo:

Koukal jsem na ten kod dobrou minutu a neprisel jsem na co ten cyklus tam vubec je. Ten cyklus je tam naprosto zbytecne, protoze bud tu hodnotu vratis, nebo vyhodis vyjimku, takze se ten kod vykona jen jednou a do-while je tam zbytecne tak jako jakykoliv jiny cyklus.

EDIT:// ted jsem si vsimnul ze tam vlastne mas 2x try-catch :-D

Editováno 24.6.2013 19:47
Nahoru Odpovědět 24.6.2013 19:45
1010011 1000101 1011000
Avatar
Benjibs
Člen
Avatar
Odpovídá na Homo
Benjibs:

Zvyšok proramu je usposobený na to, že za každých okolností dostane validné číslo.
Preto je to celé v metóde, lebo budem potrebovať také číslo na viacerých miestach programu, tak sa mi zdá zbytočné zakaždým vypisovat rovnaké try - catch atd

K editu:
Javu sa učím len 3 dni, a zatial som nedošiel na to, ako ošetrit viacero rôznych prípadov výnimky (len jeden :( )

Editováno 24.6.2013 19:57
Nahoru Odpovědět 24.6.2013 19:56
1 + 1 = 2
Avatar
Homo
Člen
Avatar
Odpovídá na Benjibs
Homo:

Ja mam ted hlavu plnou C++ takze me napadaji reseni, ktera v Jave nejsou mozna. Ale mas tam par chyb. Staticky metody nepouzivej, pokud k tomu nemas zatracene dost dobrej duvod. Metoda rika ze vraci byte pritom vracis integer. V seznamu paramatru nemas uveden typ streamu, takze to beztak ani nemas zkompilovany.
A na jednu metodu to dela az moc veci, takze se blbe da premyslet nad zbaveni cyklu.

EDIT:// ten edit z minuly postu je spatne, mas tam 1 try-catch a jedno vyhozeni. Jinak v jave na vic vyjimek je multicatch

catch (IOException|SQLException ex) {
    ...
}
Editováno 24.6.2013 20:00
Nahoru Odpovědět 24.6.2013 19:56
1010011 1000101 1011000
Avatar
Benjibs
Člen
Avatar
Odpovídá na Homo
Benjibs:

To už som medzitým opravil :)
Aký typ metody by to teda mal byt?

Nahoru Odpovědět 24.6.2013 19:59
1 + 1 = 2
Avatar
Homo
Člen
Avatar
Odpovídá na Benjibs
Homo:

Po 3 dnech jsi jeste asi na OOP v jave nenarazil co? No vysvetlovat to tu nebudu, jsou tu na to tutorialy, radsi to nech static, ale rychle pak bez na OOP at se to odnaucis :-D

Jinak k tomu tvemu kodu, udelal bych si urcite jeste jednu metodu na kontrolu jestli je to vyparsovany cislo.

public static boolean isNumeric(String str){
try{
    int i = Integer.parseInt(str);
  }catch(NumberFormatException nfe){
    return false;
  }
  return true;
}

public static int getInt(nejakej stream){
String input;
do{
 System.out.println("Enter horizontal shift(Possible value: -26 < x > 26):");
 input = stream.getLine();
}while(!(isNumeric(input) && ((given_num > -26) && (given_num < 26))));
return Integer.parseInt(input);
}
Editováno 24.6.2013 20:16
Nahoru Odpovědět 24.6.2013 20:13
1010011 1000101 1011000
Avatar
Kit
Redaktor
Avatar
Odpovídá na Homo
Kit:

Chybí ti tam deklarace a definice given_num.

Nahoru Odpovědět 24.6.2013 20:20
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Benjibs
Kit:

Proč nepoužíváš

stream.nextInt()

?
udělá dost práce za tebe.

Nahoru Odpovědět 24.6.2013 20:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Homo
Člen
Avatar
Odpovídá na Kit
Homo:

Nemila situace, tim padem ta metoda bude skareda. Ale cim vic metod tim vic java :-D Takze

private static boolean isNumeric(String str){
 try{
     int i = Integer.parseInt(str);
   }catch(NumberFormatException nfe){
     return false;
   }
   return true;
 }

 private static int parseInt(nejakej stream){
  String input;

  do{
   System.out.println("Enter horizontal shift:");
   input = stream.getLine();
  }while(!isNumeric(input));

  return Integer.parseInt(input);
 }

public static int getInt(nejakej stream){
 int result;

 do{
  System.out.println("Possible value: -26 < x > 26");
  result = parseInt(stream);
 }while(!((given_num > -26) && (given_num < 26)));

 return result;
}
Editováno 24.6.2013 20:32
Nahoru Odpovědět 24.6.2013 20:31
1010011 1000101 1011000
Avatar
Kit
Redaktor
Avatar
Odpovídá na Homo
Kit:

To vypadá strašně. Strašný je však i požadavek. Zítra možná něco vymyslím, co bude krátké, jednoduché a elegantní.

Nahoru Odpovědět 24.6.2013 21:26
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Homo
Člen
Avatar
Odpovídá na Kit
Homo:

Urcite to jde 100x lip, ja se jen ridil puvodnim kodem abych mu tam nepridaval zbytecne moc veci navic. Kdyby pouzival nextInt, nemusel bych pouzivat kontrolu jestli je vstup doopravdy cislo, ktera by sla i lepe pres regex, nebo formater, ktery nevyhazuje vyjimku.

Kdyz se tak koukam tak jsem zase nechal v tom kodu given_num :-D misto nej mel byt result.

Nahoru Odpovědět 24.6.2013 21:34
1010011 1000101 1011000
Avatar
Kit
Redaktor
Avatar
Odpovídá na Homo
Kit:

Právě proto si to nechám na zítřek. Také mi to dnes už moc nemyslí.

Zbavil bych se i objektu stream, protože není ošetřen stav, pokud ho uživatel uzavře bez zadání vstupu. Chce to prostě celé předělat a hlavně zjednodušit.

Nahoru Odpovědět 24.6.2013 21:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 12 zpráv z 12.