» »

read integer v javi

read integer v javi

zigi ::

Ze celi dan se matram z eno preprosto zadevo, ki bi jo v C-ju napisal tako:
int c;
scanf("%d", c);

No, upoam da je tak... V konzoli (DOSU) hocem da ti napise recimo "Vnesi stevilo: ", to stevilo pa bi se priredilo neki spremenljivki.

Mi lahko kdo pomaga?

OwcA ::

BufferedReader vhod = new BufferedReader(new InputStreamReader(System.in));
int a = Integer.valueOf(vhod.readLine());
Otroška radovednost - gonilo napredka.

Nox ::

no jst sem enkrat po*... nad Integer.parseInt, kr mi je posuval program(NumberFormatException, kr ni hotel sprejet '')..
.. pa sem napisal kar svojo metodo/funkcijo za pretvorbo...pretvori tud kake bedarije npr: -6jh46k4 bo pretvorlo v -6464...ni pa prav nč posebnega..
..no upam da pride komu prav:

public static int parseInt(String input) {
	int returnValue = 0; 

	for(int i = 0; i < input.length(); i++)
	{
		if( ((int)input.charAt(i) <= 57) &&
		    ((int)input.charAt(i) >= 48) ){
			returnValue *= 10;
			returnValue += (input.charAt(i) - 48);
		}
	}
	if(input.charAt(0) == '-')
		returnValue = -returnValue;

	return returnValue;
}

kopernik ::

Integer.parseInt() metoda deluje čist spodobno in jo redno uporabljam. Če so podatki napačni, je problem drugje. Exception-i pa ne posuvajo programa, temveč so zelo koristen mehanizem nadzora izvajanja programa (metod).

Nox ::

bistvo je v tem da mu jst nisem hotu striktno podajat cifr('' mu že ni blo dobro) in mi je metal vn exception(posuvajo je tko v "" rečen)...z try-catch blokom se pa nisem hotel ukvarjat, že zgolj zarad tega kr sem pretvarjal v argumentu( func(parseInt(String)) )....

drugače me pa pri javi moti dost drugih reči(ni privzetih argumentov, ! operatorja ni mogoče uporabiti na nobenem tipu razen Boolean...), kot pa slednja metoda, ki je, se strinjam s tabo, čisto spodobna, vendar v mojem (takratnem) primeru mal preveč striktna...

kopernik ::

Če prav razumem, te je motilo to, da ni požrl praznega stringa ? Ja, tako je ta metoda narejena. In včasih je prav priročna za preverjanje vnosov, ker ob napaki (NumberFormatException) veš, da je podatek napačen. Zanima me pa, kaj bi ti vrnil ob napačnem podatku (npr. prazen String) ? Če bi vrnil 0, bi bilo tako obnašanje metode včasih napačno (tam, kjer bi se obnašanje programa razlikovalo ob vrednostih 0 oz. prazen String), kar pomeni, da metoda ne bi bila splošna (to pa mora biti, če je del Java API-ja).


drugače me pa pri javi moti dost drugih reči(ni privzetih argumentov, ! operatorja ni mogoče uporabiti na nobenem tipu razen Boolean...), kot pa slednja metoda, ki je, se strinjam s tabo, čisto spodobna, vendar v mojem (takratnem) primeru mal preveč striktna...


Res je Java dokaj striktna in nekaterih stvari iz C-ja nima. Npr. enumeracije, unije, overloadanje operatorjev, pa še kaj bi se našlo. Razlog je v temu, da so avtorji menili, da z nekaterimi C-jevskimi konstrukti več izgubiš kot pa pridobiš.
Ali so imeli prav ali ne, ne vem. Ampak trenutno je stanje tako kot je.

Nox ::

ja pač me je motlo kr ni hotelo požret in me spustit do delov programa, ki so bili bolj pomembni od pravilnosti vnosa. Zato sem namesto preverjanje vhodnih nizov in konvertiranje z standardno metodo, raje napisal metodo ki bi ji blo vseeno kakšen je vnos(lahko bi bila kakršnakoli bedarija, važno bi bilo le da bi vn prišel nek int)...glede vrnjenega razultata...kaj pa če hočeš da je "" = 0, drgač glede splošnosti metode se pa strinjam....

kar se pa jave tiče je izpuščenost nekaterih(nekaterih) stvari vsaj meni banalna, pogrešam pa vse od kazalcev/referenciranja naprej(vem... bolj error-free koda...)...medtem ko ima m$ C# vsaj približno vse to(nisem ga veliko videl, vendar nekatere stvari ki jih pri javi pogrešam C# ima)...

no vsekakor si me pa 'prepričal' v to da tistega posta z kodo ne bi smel objavt, kr je brezvezen, oz ne bo nikomur pomagal ;)

kopernik ::

Ne, vsak del kode, ki se pojavi na forumu lahko nekomu koristi. Mislim, da je dobro (in ne brezveze), da si jo objavil.

Samo kot info:

Kazalci v Javi ... mogoče malo znano dejstvo je, da je vsaka spremenljivka referenca (tako se reče kazalcu v javi) na objekt - razen primitivnih tipov (int, float, ...). Torej se npr. med metodami prenašajo samo reference, ne pa dejanske vrednosti spremnljivk.

Function pointerje pa lahko ustrezno nadomestiš z interface-i in objekti, ki nimajo "stanja" (torej so brez memberjev). V teoriji programiranja je to znano kot "Strategy pattern", ki je v C-ju implementiran s function pointerji, v Javi pa z interface-i in "stateless" objekti.

Nox ::

in vendar ni mogoče referancirat spremenljivk osnovnih tipov, ali pač....

kopernik ::

Ne, primitivnih tipov ne moreš referencirat ...

Sicer za vse primitivne tipe (int, long,...) obstajajo razredi - Integer, Long, Float,..., ki jih lahko uporabiš kot vsake druge objekte. Res pa je, da je to počasnejše, ker je potrebno kreirati nove objekte.
Npr.
Long stevilo = new Long(500);
namesto
long stevilo = 500;

Objektno usmerjeni puristi ravno to očitajo Javi - torej da sploh obstajajo primitivni tipi.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[Java] Podatkovni tip

Oddelek: Programiranje
233524 (3176) piki12
»

[Android] Kaj metoda vrne?

Oddelek: Programiranje
6861 (699) virusss8
»

[C#] Pravice za spreminjanje in restore baze

Oddelek: Programiranje
5979 (799) nuclear
»

[JAVA] zaustavitev niti (threadov)

Oddelek: Programiranje
223049 (3049) morbo
»

Coding Style

Oddelek: Programiranje
433306 (2498) 64202

Več podobnih tem