|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
[Java]Lettura numero
Ho questo codice:
Codice:
import java.io.*;
/*
*
* Nome: primo.java
* Data : 23/10/2002
* Descrizione : esegue la somma di 2 numeri e ristituisce il risultato
* Autore : Lucas
*
*/
class primo
{
int primo, secondo, risultato;
public static void main(String[] args) {
System.out.println("Digita il primo numero:\n");
// Legge il primo numero
System.in.readln(primo);
System.out.println("Digita il secondo numero:\n");
// Legge il secondo numero
System.in.readln(secondo);
risultato = primo + secondo;
// Stampa il risultato
System.out.println("\nIl risultato è: "+ risultato );
}
}
Quote:
E il mio primo prog! Tnk
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
ap!
Vi allego il files......magari serve
__________________
Gnu/Linux User
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
doppio
__________________
Gnu/Linux User
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
ap
__________________
Gnu/Linux User
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
|
leggi l'errore, ti dice che non puoi utilizzare una variabile che non è static in un metodo static.
il modo più veloce per risolvere è dichiarare static primo secondo e risultato, non ti darà più l'errore. purtroppo è un problema di quando si usano dati statici questo, del resto uno prima o poi il main deve farselo quindi spesso qualcosa di statico serve :-) |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Innanzitutto il nome della classe...è buona norma usare sempre la prima lettera maiuscola, è una convenzione...le minuscole si usano per le varabili. In questo modo un programmatore che legge il tuo codice sa subito cosa si trova di fronte.
Come ti hanno detto poi, il metotdo Main è per definizione statico, perciò non puoi usare al suo interno delle variabili non statiche. Passiamo agli altri errori: C:\WINDOWS\Desktop\Luca\Java\prove\primo.java:21: cannot resolve symbol symbol : method readln (int) location: class java.io.InputStream System.in.readln(secondo); Il metodi readln NON ESISTE, come potraoi verificare dalla documentazione sulle API (se non lo hai fatto scaricatele e programma con quelle aperte SEMPRE in una finestra). Infatti: se cerchi la classe System, troverai che la variabili "in" a cui accedi, è di tipo InputStream. Allora vai a vedere la classe InputStream e ti accorgi che il metodo readln NON esiste. Esiste il metodo "read()" , che restituisce si un intero, ma in realtà viene visto come un char, ovvero un carattere. Noterai dalla documentazione che il metodi read() "lancia" (throws) IOException, perciò la sua invocazione va messa in un blocco tyy, catch. UNa versione compilabile del tuo main è questa: public static void main(String[] args) { try { System.out.println("Digita il primo numero:"); // Legge il primo numero primo = System.in.read(); System.out.println("Digita il secondo numero:"); // Legge il secondo numero secondo = System.in.read(); risultato = primo + secondo; // Stampa il risultato System.out.println("\nIl risultato è: "+ risultato ); } catch(IOException ioe){ System.out.println("Si è verificato un errore : " + ioe.getMessage()); } } Non va bene comunque per lo scopo...infatti prova ad inserire 0 come primo numero e premere invio... = in realtà 0 viene codificato come 48 che è il suo codice ASCI, e l'invio stesso viene preso come secondo carattere, il suo codice ASCI è 13. Infatto otterrai 61 come risultato! |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Una versione adatta allo scopo (ma assai scomoda!!!! E' una forzatura!):
{ public static void main(String[] args) { System.out.println("Digita il primo numero:"); // Legge il primo numero int primo; String primoNumber = ""; try{ while ( ! ((primo = System.in.read()) == 0x000d) ){ //0x000d line feed primoNumber+= (char)primo; } int temp = System.in.read(); // il 0x000a carriage return } catch(IOException ioe){ System.out.println("Si è verificato un errore : " + ioe.getMessage()); } System.out.println("primoNumber: " + primoNumber); System.out.println("Digita il secondo numero:"); // Legge il secondo numero int secondo ; String secondoNumber = ""; try{ while ( !( (secondo= System.in.read()) == 0x000d )){ secondoNumber+= (char)secondo; } } catch(IOException ioe){ System.out.println("Si è verificato un errore : " + ioe.getMessage()); } System.out.println("secondoNumber: " + secondoNumber); try{ int risultato = Integer.parseInt(primoNumber) + Integer.parseInt(secondoNumber); // Stampa il risultato System.out.println("Il risultato è: "+ risultato ); } catch(Exception ex){ System.out.println("Impossibile proseguire! " + ex.getMessage()+ " non e' un intero!" ); } } } In pratica il problema + grosso è non considerare il tasto INVIO, la cui codifica ASCII è 10 (0X00a in esadecimale) + 13, ovvero pensa a una macchina da scrivere e a quando volevi andare a capo: facevi un movimento per portare il foglio a fine corsa (line feed= 10) e poi giravi la rotellina (carriage return=13). |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Sembra un casino! Ma in realtà usando altri modi ci si impiega un attimo...l'input da terminale poi, in JAVA, è proprio una delle cose più scomode... Bastava ad esempio passare i due numeri da sommare come parametri del metodo main(String args[]).
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
in che senso sommarli?
__________________
Gnu/Linux User
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Non ho capito...in che senso..."in che senso?"
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
public static void main(String[] args) {
int n1 = Integer.parseInt(args[0]); int n2 = Integer.parseInt(args[1]); System.out.println(n1 + " + " + n2 + " = " + (n1+n2)); } da linea di comando: java Primo 1 1 ti darà l'output 1 + 1 = 2 |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
Capito, tmk!
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
Di niente! Un consiglio, non ricordo se l'avevo già detto: lascia perdere il jBuilder per cominciare..."Sporca" il codice con un casino di cavolate sue e non ti permette di capire alcuni concetti semplici ma fondamentali come quello di classpath. procurati un Editor di testo potente (c'è n'è un mucchio ancghe freeware, io uso UltraEdit o EditPlus) e compila ed esgu direttamente da jre le tue applicazioni
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
ora uso JCreator Le e mi piacie molto! Che ne pensi di questo????? Altra domanda ......essendo uscire il Sdk 1.4.1 e avendo io l'1.3.1, dovrei aggiornarE?
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#16 |
|
Senior Member
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
|
JCreator Le -...onestamente non lo conosco...
Per l'aggiornamento...direi di no! Pensa che noi sviluppiamo ancora con la 1.1.8 Le funzionalità base non cambiano di certo |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Sdk 1.3.1 ---> Sdk 1.4.1: conviene ?
Quote:
__________________
Gnu/Linux User
|
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Sdk 1.3.1 ---> Sdk 1.4.1: conviene ?
Quote:
tnk
__________________
Gnu/Linux User
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:22.


















