View Full Version : [JAVA] vettore e acquisizione
Ciao raga l'esercizio chiede: Una scuola è composta da N classi. Per ogni classe viene inserito da tastiera il numero di studenti. calcolare quanti studenti frequentano la scuola e la media di tutto l'istituto.
Bhe, io ho cercato di farlo ma non capisco perchè mi da questo errore:
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The local variable nclassi may not have been initialized
The local variable nclassi may not have been initialized
The local variable somma may not have been initialized
The local variable somma may not have been initialized
The local variable nclassi may not have been initialized
The local variable somma may not have been initialized
at numero22.numero22.main(numero22.java:27)
Questo l'esercizio:
package numero22;
import java.io.*;
public class numero22 {
public static void main (String[] args){
InputStreamReader input = new InputStreamReader (System.in);
BufferedReader tastiera = new BufferedReader (input);
int classe[]=new int [200];
String snclassi;
int nclassi;
try{
System.out.println("Digitare quante classe sono presenti nell'istituto (max 200): " );
snclassi=tastiera.readLine();
nclassi=Integer.valueOf(snclassi).intValue();
}
catch (Exception e){}
String nstud;
for (int i=0;i<nclassi;i++){
try{
System.out.println("Digitare quanti alunni sono presenti nella classe "+ i+1 + " :" );
nstud=tastiera.readLine();
classe[i]=Integer.valueOf(nstud).intValue();
}
catch (Exception e){}
}
int somma;
for(int i=0;i<nclassi;i++){
somma+=classe[i];
}
int media= somma/nclassi;
System.out.println("la somma di studenti in totale e'" +somma);
System.out.println("la media di studenti e'" +media);
}
}
sottovento
14-11-2014, 22:52
Java ti sta avvertendo che in caso di eccezione potresti non aver assegnato nessun valore alle variabili, o almeno ad una di loro.
Nonostante questo, hai deciso di proseguire l'esecuzione come se niente fosse. in caso di eccezione, quindi, potresti incorrere in problemi seri. Questo e' il significato di quell'errore.
Invece di Integer.valueOf() potresti usare l'Integer.parseInt(), cosi' eviti un boxing/unboxing non richiesto. Ricorda che solleva un'eccezione Runtime di tipo NumberFormatException; pertanto potresti anche decidere di non catturarla, sapendo che se l'utente inserisce dati errati il programma terminera' con un errore. Tutto sommato e' un programma di esempio e potrebbe anche essere accettabile.
Infine, la readLine() solleva una IOException: sarebbe meglio utilizzare sempre il tipo piu' specifico di eccezione, soprattutto evitare di fare il catch(Exception) poiche' potrebbe produrre situazioni molto spiacevoli (naturalmente in programmi piu' complessi, ma in sostanza non cambia molto).
Netbeans ti segnala di non usare catch(Exception); ed immagino che Eclipse faccia lo stesso
ok grazie ho risolto con =0
L'esercizio chiede: creare la classe rettangolo con gli attributi base e altezza e i metodi perimetro e area. un'altra classe con attributi raggio e metodi perimetro e area. una classe esercizio1 che ha solo il metodo main. creare due oggetti di tipo rettangolo con i lati avcquisiti da tastiera e due oggetti di tipo cerchio. stampare area e perimetro e l'oggetto con area maggiore e perimetro minore.
Raga ma cosa c'è di sbagliato secondo voi?
import java.io.*;
public class cerchio {
private double raggio;
public cerchio (double raggio){
setRaggio(raggio);
}
public void setRaggio (double raggio) { this.raggio=raggio; }
public double perimetro (){
double perimetro3= (raggio*6,28);
return perimetro3;
}
public double area (){
double area3= (raggio*raggio)*3,14;
return area3;
}
public class rettangolo {
private double base;
private double h;
public rettangolo (double base, double h){
setBase(base);
setH(h);
}
public void setBase (double base) { this.base=base; }
public void setH (double h) { this.h=h; }
public double perimetro (){
double perimetro2= (base+h)*2;
return perimetro2;
}
public double area (){
double area2= (base*h);
return area2;
}
public static void main (String[] args){
InputStreamReader input = new InputStreamReader (System.in);
BufferedReader tastiera = new BufferedReader (input);
String sbase;
String sh;
int base=0;
int h=0;
try{
System.out.println("Digitare la base del rettangolo: " );
sbase=tastiera.readLine();
base=Integer.valueOf(sbase).intValue();
System.out.println("Digitare la h del rettangolo: " );
sh=tastiera.readLine();
h=Integer.valueOf(sh).intValue();
System.out.println("Digitare il raggio del cerchio: " );
sraggio=tastiera.readLine();
raggio=Integer.valueOf(sraggio).intValue();
}
catch (Exception e){}
rettangolo rett= new rettangolo (base,h);
System.out.println("il perimetro del rettangolo e': "+rett.perimetro());
System.out.println("la base del rettangolo e': " + rett.area() );
String sraggio:
int raggio=0;
try{
System.out.println("digitare il raggio del cerchio: ");
sraggio=tastiera.readLine();
raggio=Integer.valueOf(sraggio).intValue();
}
catch (Exception e){}
cerchio cerc= new cerchio (raggio);
System.out.println("l'area del cerchio e': "+cerc.area());
System.out.println("il perimetro (o circonferenza) del cerchio e': "+cerc.perimetro());
if(rett.area>cerc.area) System.out.println("L'area piu' grande e' del rettangolo. ("+rett.area+")");
else System.out.println("L'area piu' grande e' del cerchio. ("+cerc.area+")");
if(rett.perimetro<cerc.perimetro) System.out.println("Il perimetro minore e' del rettangolo. ("+rett.perimetro+")");
else System.out.println("Il perimetro minore e' del rettangolo. ("+cerc.perimetro+")");
}
}
Non mi fa propio compilare
sottovento
16-11-2014, 16:19
Comincia a correggere un po' di errori di sintassi.
Per esempio, la virgola decimale e' in realta' un punto. Quindi non devi scrivere i numeri decimali come 6,28 o 3,14 ma come 6.28 e 3.14
Inoltre non devi scrivere
String sraggio:
(i due punti sono errati, occorre il punto e virgola)
Altro suggerimento: Java ha uno standard ampiamente utilizzato ed apprezzato per quanto riguarda i nomi delle variabili e delle classi.
La classe dovrebbe cominciare con una maiuscola, quindi - anche se non obbligatorio - sarebbe meglio cambiare cerchio con Cerchio. Tutti gli sviluppatori lo fanno, e diventando un'abitudine di tutti, semplifichi il lavoro di lettura/modifica/manutenzione
Comincia a correggere un po' di errori di sintassi.
Per esempio, la virgola decimale e' in realta' un punto. Quindi non devi scrivere i numeri decimali come 6,28 o 3,14 ma come 6.28 e 3.14
Inoltre non devi scrivere
String sraggio:
(i due punti sono errati, occorre il punto e virgola)
Altro suggerimento: Java ha uno standard ampiamente utilizzato ed apprezzato per quanto riguarda i nomi delle variabili e delle classi.
La classe dovrebbe cominciare con una maiuscola, quindi - anche se non obbligatorio - sarebbe meglio cambiare cerchio con Cerchio. Tutti gli sviluppatori lo fanno, e diventando un'abitudine di tutti, semplifichi il lavoro di lettura/modifica/manutenzione
Si grazie per avermelo detto, sono errori occasionali che dopo 5 minuti ho corretto e che mi sono dimenticato di apportale le modifiche qui nel topic. comunque ho fatto due classi: uno rettangolo.java e l'altro cerchio.java.
RETTANGOLO.JAVA questo
package geometria;
public class rettangolo {
private double base;
private double h;
public rettangolo (double base, double h){
setBase(base);
setH(h);
}
public void setBase (double base) { this.base=base; }
public void setH (double h) { this.h=h; }
public double perimetro (){
double perimetro2= (base+h)*2;
return perimetro2;
}
public double area (){
double area2= (base*h);
return area2;
}
}
CERCHIO.JAVA questo
package geometria;
public class cerchio {
private double raggio;
public cerchio (double raggio){
setRaggio(raggio);
}
public void setRaggio (double raggio) { this.raggio=raggio; }
public double perimetro (){
double perimetro3= (raggio*6.28);
return perimetro3;
}
public double area (){
double area3= (raggio*raggio)*3.14;
return area3;
}
}
e questo è la classe ESERCIZIO1.JAVA che contiene il main
import java.io.*;
package geometria;
public class esercizio1 {
public static void main (String[] args){
InputStreamReader input = new InputStreamReader (System.in);
BufferedReader tastiera = new BufferedReader (input);
String sbase1;
String sh1;
int base1=0;
int h1=0;
try{
System.out.println("Digitare la base del primo rettangolo: " );
sbase1=tastiera.readLine();
base1=Integer.valueOf(sbase1).intValue();
System.out.println("Digitare la h del primo rettangolo: " );
sh1=tastiera.readLine();
h1=Integer.valueOf(sh1).intValue();
}
catch (Exception e){}
rettangolo rett1= new rettangolo (base1,h1);
System.out.println("il perimetro del primo rettangolo e': "+rett1.perimetro());
System.out.println("la base del primo rettangolo e': " + rett1.area() );
String sbase2;
String sh2;
int base2=0;
int h2=0;
try{
System.out.println("Digitare la base del secondo rettangolo: " );
sbase2=tastiera.readLine();
base2=Integer.valueOf(sbase2).intValue();
System.out.println("Digitare la h del secondo rettangolo: " );
sh2=tastiera.readLine();
h2=Integer.valueOf(sh2).intValue();
}
catch (Exception e){}
rettangolo rett2= new rettangolo (base2,h2);
System.out.println("il perimetro del secondo rettangolo e': "+rett2.perimetro());
System.out.println("la base del secondo rettangolo e': " + rett2.area() );
String sraggio1;
int raggio1=0;
try{
System.out.println("digitare il raggio del primo cerchio: ");
sraggio1=tastiera.readLine();
raggio1=Integer.valueOf(sraggio1).intValue();
}
catch (Exception e){}
cerchio cerc1= new cerchio (raggio1);
System.out.println("l'area del primo cerchio e': "+cerc1.area());
System.out.println("il perimetro (o circonferenza) del primo cerchio e': "+cerc1.perimetro());
String sraggio2;
int raggio2=0;
try{
System.out.println("digitare il raggio del secondo cerchio: ");
sraggio2=tastiera.readLine();
raggio2=Integer.valueOf(sraggio2).intValue();
}
catch (Exception e){}
cerchio cerc2= new cerchio (raggio2);
System.out.println("l'area del secondo cerchio e': "+cerc2.area());
System.out.println("il perimetro (o circonferenza) del secondo cerchio e': "+cerc2.perimetro());
double maxarea=0;
if(rett1.area()>rett2.area()) maxarea=rett1.area();
else maxarea=rett2.area();
if(cerc1.area()>maxarea) maxarea=cerc1.area();
if(cerc2.area()>maxarea) maxarea=cerc2.area();
System.out.println("L'area piu' grande e': "+maxarea);
double minp=0;
if(rett1.perimetro()<rett2.perimetro()) minp=rett1.perimetro();
else minp=rett2.perimetro();
if(cerc1.perimetro()<minp) minp=cerc1.perimetro();
if(cerc2.perimetro()<minp) minp=cerc2.perimetro();
System.out.println("Il perimetro piu' piccolo e': "+minp);
}
}
}
}
Adesso... come faccio a usare le classi rettangolo.java e cerchio.java?? Help!
Ps: uso Eclipse come IDE
sottovento
19-11-2014, 15:13
Adesso... come faccio a usare le classi rettangolo.java e cerchio.java?? Help!
Sono confuso! Nel main usi le classi, apparentemente in modo corretto. Come mai chiedi come usarle se gia' le usi?
Hai qualche dubbio in particolare?
Sono confuso! Nel main usi le classi, apparentemente in modo corretto. Come mai chiedi come usarle se gia' le usi?
Hai qualche dubbio in particolare?
Compilandolo mi da questi errori
rettangolo cannot be resolved to a type
rettangolo cannot be resolved to a type
rettangolo cannot be resolved to a type
rettangolo cannot be resolved to a type
cerchio cannot be resolved to a type
cerchio cannot be resolved to a type
cerchio cannot be resolved to a type
cerchio cannot be resolved to a type
sottovento
20-11-2014, 15:45
Compilandolo mi da questi errori
rettangolo cannot be resolved to a type
rettangolo cannot be resolved to a type
rettangolo cannot be resolved to a type
rettangolo cannot be resolved to a type
cerchio cannot be resolved to a type
cerchio cannot be resolved to a type
cerchio cannot be resolved to a type
cerchio cannot be resolved to a type
Se non ricordo male, trattasi di bug di Eclipse. Hai provato a farlo ripartire?
Per curiosita' ho provato a compilare il codice con javac ed ho provato le versioni 6, 7, 8 e funziona
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.