Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Conversione da Celsius a Farheneit e viceversa

    Ciao a tutti!

    Sono nuovo di java e della programmazione in generale, per cui mi scuso se la domanda è banale.
    Il mio problema, come da titolo, è convertire i gradi celsius in frehneit o viceversa, a seconda dell' input dell' utente. Il programma infatti dovrebbe essere in grado di riconoscere l' unità di misura dell' imput, che deve essere inclusa dall' utente.
    Per esempio, un imput corretto per i gradi celsius potrebbe essere: 10° C o 10* c, un imput corretto per i farenheit sarebbe: 20° F o 20° f.

    Per risolvere il problema ho ideato questo codice:


    import java.util.*;

    class ConversioneGradi {

    public static void main (String[] args) {

    double gradi_Celsius, gradi_Farheneit;
    string s1, s2, s3;

    Scanner tastiera = new Scanner(System.in);

    System.out.println("Inserisci la temperatura in gradi celsius o farheneit, specificando a quale scala appartiene la temperatura con una letta appropriata a seguito del numero: ");

    s1 = tastiera.nextLine();

    s2 = s1.toLowerCase();
    int c = s2.indexOf(c);
    int f = s2.indexOf(f);

    if (c>=0) {
    s3 = s2.substring(0,c);
    gradi_Celsius = (double)s3;
    gradi_Farheneit = (9(gradi_Celsius)/5)+32;
    System.out.println(s1 + " " + "equivalgono a" + " " + gradi_Farheneit + " " + "F"); }
    else if (f>=0) {
    s3 = s2.substring(0,f);
    gradi_Farheneit = (double)s3;
    gradi_Celsius = 5(gradi_Farenheit-32)/9;
    System.out.println(s1 + " " + "equivalgono a" + " " + gradi_Celsius + " " + "C"); }

    }

    }

    Il problema è che al momento della compilazione, si rilevano alcuni errori, che secondo me non dovrebbero esserci.
    Questi errori riguardano le parentesi attorno a gradi_Celsius e gradi_Farheneit, il compilatore si aspetta dei ';' al posto delle parentesi, oppure delle parentesi di verso opposto, oppure dice "not a statement".
    Temo che il problema sia nel type cast che dovrebbe essere da string a double, ma non capisco come potrei fare il type cast altrimenti!

    Grazie in anticipo per le risposte, ve ne sono davvero grato!

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    I problemi sono molteplici.

    In primis, string non vuol dire nulla. Il tipo di dato è String (s maiuscola).
    Non puoi castare una stringa in un double (il libro dovrebbe dirtele certe cose). ^^ Devi utilizzare Double.parseDouble(stringa);
    codice:
    5(gradi_Farenheit-32)
    Devi porre il segno di moltiplicazione, non viene data "per scontato".

    Sappi che se il tuo obiettivo è leggere "10 C" avrai altri problemi. indexOf() non si utilizza in quel modo, in secondo luogo perchè dovresti porre dei delimitatori differenti a Scanner.

    Comunque dovrebbero essere affrontati più avanti questi aspetti, non ora.

  3. #3
    Accipicchai, è vero, ora mi da errore nelle righe con indexOf()!
    Ma purtroppo, ho appena controllato, il libro non da un vero esempio di uso corretto di indexOf. Se è per questo il libro ha anche sbagliato a darmi le formule da inserire a listato! (per quello non avevo messo i segni di moltiplicazione).
    Se mi potete gentilmente spiegare come si usa correttamente il metodo indexOf ve ne sarei molto grato
    Il tipo di errore è:
    _variable c might not have been inizialized
    _variable f might not have been initialized

    gia che ci sono posto il nuovo codice:

    import java.util.*;

    class ConversioneGradi {

    public static void main (String[] args) {

    double gradi_Celsius, gradi_Farheneit;
    String s1, s2, s3;

    Scanner tastiera = new Scanner(System.in);

    System.out.println("Inserisci la temperatura in gradi

    celsius o farheneit, specificando a

    quale scala appartiene la

    temperatura con una letta appropriata a seguito

    del numero: ");

    s1 = tastiera.nextLine();

    s2 = s1.toLowerCase();
    int c = s2.indexOf(c);
    int f = s2.indexOf(f);

    if (c>=0) {
    s3 = s2.substring(0,c);
    gradi_Celsius = Double.parseDouble(s3);
    gradi_Farheneit = (9*(gradi_Celsius)/5)+32;
    System.out.println(s1 + " " + "equivalgono a" + " "

    + gradi_Farheneit + " " + "F"); }
    else if (f>=0) {
    s3 = s2.substring(0,f);
    gradi_Farheneit = Double.parseDouble(s3);
    gradi_Celsius = 5*(gradi_Farheneit-32)/9;
    System.out.println(s1 + " " + "equivalgono a" + " "

    + gradi_Celsius + " " + "C"); }

    }

    }

  4. #4
    Scusate tutti, il problema con indexOf è risolto, avevo dimenticato le virgolette, ma ora mi da un problema diverso:
    A quanto pare l' input è considerato valido solo se è nella forma "10C" o "10 C", non altrettanto per le forme "10°C" o "10° C".
    Perchè il pallino da problemi??
    Ah, scusate, credo di aver capito perchè
    Vediamo se riesco a risolvere da solo...

  5. #5
    Ho sostituito il vecchio codice con il seguente:

    import java.util.*;

    class ConversioneGradi {

    public static void main (String[] args) {

    double gradi_Celsius, gradi_Farheneit;
    String s1, s2, s3;

    Scanner tastiera = new Scanner(System.in);

    System.out.println("Inserisci la temperatura in gradi celsius o farheneit, specificando a quale scala appartiene la temperatura con una lettera appropriata a seguito del numero: ");

    s1 = tastiera.nextLine();

    s2 = s1.toLowerCase();
    int c = s2.indexOf("c");
    int f = s2.indexOf("f");
    int punto = s2.indexOf("°");

    if ((c>=0)&&(punto<0)) {
    s3 = s2.substring(0,c);
    gradi_Celsius = Double.parseDouble(s3);
    gradi_Farheneit = (9*(gradi_Celsius)/5)+32;
    System.out.println(s1 + " " + "equivalgono a" + " " + gradi_Farheneit + " " + "F"); }
    else if ((f>=0)&&(punto<0)) {
    s3 = s2.substring(0,f);
    gradi_Farheneit = Double.parseDouble(s3);
    gradi_Celsius = 5*(gradi_Farheneit-32)/9;
    System.out.println(s1 + " " + "equivalgono a" + " " + gradi_Celsius + " " + "C"); }
    else if ((c>=0)&&(punto>=0)){
    s3 = s2.substring(0,°);
    gradi_Celsius = Double.parseDouble(s3);
    gradi_Farheneit = (9*(gradi_Celsius)/5)+32;
    System.out.println(s1 + " " + "equivalgono a" + " " + gradi_Farheneit + " " + "F"); }
    else if ((f>=0)&&(punto>=0)){
    s3 = s2.substring(0,°);
    gradi_Farheneit = Double.parseDouble(s3);
    gradi_Celsius = 5*(gradi_Farheneit-32)/9;
    System.out.println(s1 + " " + "equivalgono a" + " " + gradi_Celsius + " " + "C"); }
    else if ((c<0)&&(f<0)) {
    System.out.println("Errore: devi specificare l' unità di misura"); }

    }

    }

    Così ne ho approfittato per inserirci un bel messaggio d' errore

    Però in fase di compilazione, mi da illegal character quando metto "°" come argomento di substring, non mi da alcun problema invece quando uso lo stesso carattere con indexOf.
    Che significa? Mi pare alquanto strano che con indexOf lo riconosca e con substring no!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    E' necessario consultare l'API quando non si conosce il funzionamento di qualcosa: http://docs.oracle.com/javase/7/docs...ng/String.html
    In questo moto ti accorgerai che non vi è alcuna versione di substring che riceve come parametro un intero ed un carattere. Devi usare la variabile punto... ma i problemi arriveranno sicuramente al runtime.

    Visto che stai imparando evito di dirti che questo codice non è il massimo...

    PS: ricorda quando posti del codice di utilizzare i tag code, al fine di rendere il codice più leggibile e mantenere anche l'indentazione. ^^

  7. #7
    Posso sapere che codice avresti usato, Patrik?
    Così magari a vedere gli esempi buoni imparo ^_^

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.