PDA

Visualizza la versione completa : [JAVA] Area poligono ed errore NumberFormatException


zannas
20-11-2005, 16:56
ecco il sorgente file:

import java.io.*;
import pack.*;

class Area_by_Gauss {

private int numero_vertici;
private Float area;

final String descrizione = "Con questo piccolo programma si sarà in grado di calcolare l'area di un qualsiasi poligono avendo tutte le coordinate dei suoi punti rispetto a un generico piano cartesiano. NB= L'unità di misura del risultato sarà come quella inserita e ovviamente elevata alla seconda.";

public static void main(String args[]){
Area_by_Gauss risultato = new Area_by_Gauss();
}

public Area_by_Gauss(){
System.out.println(this.descrizione);
System.out.println();
System.out.println("Formula: 1/2 * sommatoria[Ni * (Xi+1 - Xi-1])");
System.out.println("Inserisci il numero dei vertici della figura");

try {
setNVertici();
} catch (IOException e) {
System.out.println(e);
}

Poligono figura = new Poligono(this.numero_vertici);
}

public void setNVertici() throws IOException {
int n_caratteri_x_n_vertici = 10;
byte[] b = new byte[n_caratteri_x_n_vertici];
char[] numeri = new char[n_caratteri_x_n_vertici];

BufferedInputStream buffer = new BufferedInputStream(System.in);
buffer.read(b);

System.out.println();

int i = 0;
while( i < n_caratteri_x_n_vertici) {
numeri[i] = (char)b[i];
i++;
}

this.numero_vertici = Integer.parseInt(String.valueOf(numeri));

System.out.println("Il poligono è formato da " + this.numero_vertici +" vertici");

}

}
ecco il risultato digitando qualsiasi numero:

Con questo piccolo programma si sarÓ in grado di calcolare l'area di un qualsias
i poligono avendo tutte le coordinate dei suoi punti rispetto a un generico pian
o cartesiano. NB= L'unitÓ di misura del risultato sarÓ come quella inserita e ov
viamente elevata alla seconda.

Formula: 1/2 * sommatoria[Ni * (Xi+1 - Xi-1])
Inserisci il numero dei vertici della figura
3

Exception in thread "main" java.lang.NumberFormatException: For input string: "3

"
at java.lang.NumberFormatException.forInputString(Unk nown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at Area_by_Gauss.setNVertici(Area_by_Gauss.java:46)
at Area_by_Gauss.<init>(Area_by_Gauss.java:22)
at Area_by_Gauss.main(Area_by_Gauss.java:12)
come devo modificare il codice??

anx721
20-11-2005, 17:49
import java.io.*;
class Area_by_Gauss {

private int numero_vertici;
private Float area;

final String descrizione = "Con questo piccolo programma si sarà in grado di calcolare l'area di un qualsiasi poligono avendo tutte le coordinate dei suoi punti rispetto a un generico piano cartesiano. NB= L'unità di misura del risultato sarà come quella inserita e ovviamente elevata alla seconda.";

public static void main(String args[]){
Area_by_Gauss risultato = new Area_by_Gauss();
}

public Area_by_Gauss(){
System.out.println(this.descrizione);
System.out.println();
System.out.println("Formula: 1/2 * sommatoria[Ni * (Xi+1 - Xi-1])");
System.out.println("Inserisci il numero dei vertici della figura");

try {
setNVertici();
} catch (IOException e) {
System.out.println(e);
}

Poligono figura = new Poligono(this.numero_vertici);
}

public void setNVertici() throws IOException {
this.numero_vertici = leggiNumero("Inserisci il numero dei vertici: ");
System.out.println("Il poligono e' formato da " + this.numero_vertici +" vertici");
}

private int leggiNumero(String messaggio){
System.out.println(messaggio);
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String num = "";
while(true){
try{
num = reader.readLine();
return Integer.parseInt(num);
}
catch(NumberFormatException exc){
System.out.println("Il valore inserito non è un numero.");
System.out.println("Rpeti l'inserimento: ");
}
catch(IOException exc){
System.out.println(exc);
}
}
}

}

zannas
21-11-2005, 00:40
wow funziona alla meraviglia..era proprio quello che volevo fare...thanks anx721...cmq era così tanto sbagliato come avevo fatto io? non riesco a capire tutt'ora xkè il codice scritto da me in precedenza sia errato

floyd
21-11-2005, 09:32
this.numero_vertici = Integer.parseInt(String.valueOf(numeri));
numero_vertici è un int
numeri credo che avesse un ritorno a capo come ultimo char

anx721
21-11-2005, 14:07
Originariamente inviato da floyd
numeri credo che avesse un ritorno a capo come ultimo char

L'errore era questo e quindi la stirnga non rappresentava un numero valido.

zannas
24-11-2005, 01:05
diciamo che non ho capito molto bene questo errore...cmq volevo sottoporvi a un altro quesito:
se lancio la my applicazione con un file per es un *.bat con quest codice (trovandosi nella stessa cartella):

java Area_by_Gauss
l'applicazione parte, inserisco i dati ecc..ma quando deve farmi vedere il risultato esce dal promt. Come devo rimediare? ho provato a inserire anche System.exit(0); o (-1) o (1) ma è inutile. Inoltre vorrei che l'applicazione una volta che ha finito il suo corso chieda all'utente se vuole fare un'altro problema e quindi ricominciasse da 0. Come devo fare?

Andrea1979
24-11-2005, 10:34
prova ad aggiungere, intanto, un blocco try/catch del tipo

try {
System.in.read();
}
catch (Exception e) {}
Alla fine del main.

LeleFT
24-11-2005, 13:58
Nel BAT aggiungi alla fine questa riga:


pause

Ciao. :ciauz:

Andrea1979
24-11-2005, 14:01
Originariamente inviato da Andrea1979
prova ad aggiungere, intanto, un blocco try/catch del tipo

try {
System.in.read();
}
catch (Exception e) {}
Alla fine del main.



Originariamente inviato da LeleFT
Nel BAT aggiungi alla fine questa riga:


pause

Ciao. :ciauz:


e..soprattutto, a parte il Fernet Branca... ma perché non fai un jar eseguibile con l'applicazione? :oVVoVe:

murder eyes
25-11-2005, 00:49
Inoltre vorrei che l'applicazione una volta che ha finito il suo corso chieda all'utente se vuole fare un'altro problema e quindi ricominciasse da 0. Come devo fare?

Potresti anche scrivere una
getchar in fondo al codice Java che aspetta la pressione del tasto invio

Loading