Newsgroup: it.comp.java
Titolo: Spiegazioni riguardo questo semplice codice :-P

Il codice è il seguente, scusate se la domanda sembra un po poco leggibile:
public class Input {
	public static void main (String argv [ ]) {
		float b, h;
		double a;
		char p;
 
		System.out.print ("Inserire poligono 
(T)riangolo/(R)ettangolo :");
		p = (char) leggi (false);
		System.out.print ("inserire base: ");
		b = leggi (true);
		System.out.print ("inserire altezza : ");
		h = leggi (true);
		a = area (b, h ,p);
		System.out.print("il poligono ha l'area = ");
		System.out.println (a);
	}
static double area (float base, float altezza, char poligono) {
	switch (poligono) {
		case 'T':
			return base * altezza  /  2.0;
		case 'R':
			return base * altezza;
		default:
			return 0;
	}
}
static int leggi (boolean num) {
	byte b[ ] = new byte [9];
	int Return = 0;
	try {
		System.in.read(b); ?????? ma se b è un array?
	} catch (Exception e) {}
	if (num)
         	for (int  i = 0 ;  i < b.length ; i++)
			if (b [i] >= '0' && b[i] <= '9')      ?????????
				Return = Return * 10 + b[i]- '0';
			else
				break;
	else
		if (b[0] >= ' ')
			Return = b[0];
		return Return;
}
}
Nella parte dove stanno i punti interrogativi io leggo nel try un 
qualcosa da mettere in b, poi se è un numero nn capisco bene quello che 
fa. Tralasciando la riga che fa Return = Return etc... etc... (che fa 
qualcosa di strano ma nn mi interessa al momento :-))nn riesco a capire 
come fa un array dichiarato sopra a fare da quel che capisco la 
seguente cosa + o - cioè:
b[] = dagli un valore (es. 13 attraverso il comando System.in.read(b)) 
che mi servirà in seguito per calcolare l'area. Probabilmente nn ho 
capito bene gli array. Se sapete darmi delucidazioni vi rigrazio tanto.
Grazie

        break
non fa altro che convertire i singoli caratteri letti in un intero, un po'
come si faceva alle elementari:
123 = '1' centinaio + '2' decine + '3' unità..se un char è i, allora i-'0'
ne restituisce il valore numerico decimale (si sfrutta una proprietà del
codice ASCII).
Spero di essere stato chiaro (ne dubito...)
Scorpio.

Il metodo System.in.read(array b) legge tanti caratteri quanti ce ne stanno
in b, oppure meno se ce ne sono meno disponibili. Quindi non fa altro che
riempire i primi posti di b con i primi caratteri disponibili. Nel codice b
viene istanziato di lunghezza 9. Se nell'input c'è scritto 83572, dopo la
riga incriminata gli elemnti di b saranno:
8
3
5
7
2
?
?
?
?
dove i ? volgiono dire elementi non inizializzati (non so cosa siano).
Ora si passa alla seconda parte: il ciclo esamina gli elementi di b e,
finchè sono cifre (fra 0 e 9 compresi), li aggiunge al numero "Return"
(questa è la cosa strana che non ti interessava per ora) moltiplicando per
dieci quello che ha letto prim. Detto così non si capisce molto, ma
l'esempio chiarifica tutto:
- legge il primo elemento, che è 8: bene, il numero inserito è 8.
- legge il secondo, che è 3: cavolo, allora la cifra letta al passo
precedente erano le decine, non le unità. Quindi il numero è 8x10 + 3 = 83.
- legge il terzo, che è 5: cavolo, allora la cifra inserita prima erano le
decine, quella prima ancora le centinaia. Allora il numero è 8x100 + 3x10 +
5, cioè 83x10 + 5 = 835
- ....
- legge il sesto elemento: non è una "cifra". Allora il numero è finito e
posso uscire dal ciclo (comando break).
Spero di averti chiarito i dubbi...
Ciao
Giacomo

 codice ASCII).
ohi! A parte il fatto che mi era sfuggito questo particolare, che quindi ho
tralascito nella mia spiegazione, mi ridici (un po' come si fa coi grulli) a
cosa serve quel -'0'?
Grazie
Giacomo


Scorpio.

Ottimo!
Grazie ancora
Giacomo

 Grazie ancora
Di nulla... per completezza, devo solo aggiungere che non so (ma ritengo
probabile di sģ) se il suddetto meccanismo funzioni anche con Unicode.
Scorpio.