Conversione da stringa ad intero

di il
7 risposte

Conversione da stringa ad intero

Ciao a tutti, sono alle prese con l'ennesimo esercizio il quale mi chiede:
Si scriva un programma che legga dalla tastiera un numero binario di quattro bit sotto forma di stringa e che poi lo converta in un numero decimale. Per esempio, se l'input è 1100, l'output deve essere 12. Suggerimento: si suddivida la stringa in sottostringhe e quindi, si converta ciascuna sottostringa in un valore per ciascun bit. Se i bit sono b0, b1, b2 e b3 il numero decimale equivalente potrà esser calcolato con la forma 8*b0+4*b1+2*b2+b3.
posto il codice fino a dove sono arrivato:
package progetto2_11;

import java.util.Scanner;

public class Progetto2_11 {

    public static void main(String[] args) {
       
        Scanner tastiera = new Scanner(System.in);
        System.out.println("Scrivi un numero in forma binaria di 4 bit:");
        String s1 = tastiera.next();
        String s2 = s1.substring(0, 1);
        String s3 = s1.substring(1, 2);
        String s4 = s1.substring(2, 3);
        String s5 = s1.substring(3, 4);
        
    }
    
}
Io sono arrivato fino a dove mi dice di suddividere le stringhe in sottostringhe e per farlo ho utilizzato il metodo substring, ma quando mi chiede di convertire la sottostringa in un valore mi blocco. Ho girovagato un po su internet e ho trovato che si può utilizzare il metodo parseInt della classe Integer che però non ho ancora studiato; qualche suggerimento su come fare senza utilizzare questo metodo?
Ringrazio.

7 Risposte

  • Re: Conversione da stringa ad intero

    Nota che se vuoi prendere un singolo carattere come sottostringa puoi anche usare:
    char c1 = s1.charAt (0);
    In molti casi è più comodo e compatto, ma in caso che tu debba poi usare il parseInt o altri metodi che prendono una stringa, dovresti comunque tornare da char a String, quindi ora va benissimo così, era solo per darti un'alternativa se non la conoscevi già.

    Integer.parseInt è esattamente il metodo di cui hai bisogno, "l'alternativa" più utilizzata è comunque un metodo di Integer, ovvero Integer.valueOf, che restituisce un oggetto Integer invece di un primitivo int.
    Entrambi ti consentono di specificare anche una radice per la conversione, quindi potresti anche passare la radice 2 nel tuo caso, sempre che ti sia consentito.

    Se non puoi usare classi che non hai ancora visto l'alternativa più semplice è farti un tuo metodo che converta un carattere in cifra, basta uno switch molto semplice
  • Re: Conversione da stringa ad intero

    Ok, grazie, ho risolto così:
    package progetto2_11;
    
    import java.util.Scanner;
    
    public class Progetto2_11 {
    
        public static void main(String[] args) {
           
            Scanner tastiera = new Scanner(System.in);
            System.out.println("Scrivi un numero in forma binaria di 4 bit:");
            String s1 = tastiera.next();
            char s2 = s1.charAt(0);
            char s3 = s1.charAt(1);
            char s4 = s1.charAt(2);
            char s5 = s1.charAt(3);
            int b0 = (int)s2-(int)'0';
            int b1 = (int)s3-(int)'0';
            int b2 = (int)s4-(int)'0';
            int b3 = (int)s5-(int)'0';
            System.out.println("il risultato nella forma decimale è: "+ (8*b0+4*b1+2*b2+b3));
            
        }
        
    }
  • Re: Conversione da stringa ad intero

    wall87 ha scritto:


            int b0 = (int)s2-(int)'0';
            int b1 = (int)s3-(int)'0';
            int b2 = (int)s4-(int)'0';
            int b3 = (int)s5-(int)'0';
    Corretto. Ma i cast sono assolutamente superflui. Per via della binary numeric promotion, i due operandi char vengono già portati ad int per fare la sottrazione.

    int b0 = s2 - '0';

    è sufficiente.
  • Re: Conversione da stringa ad intero

    Ti ringrazio per la dritta, ho fatto così perchè è la conversione che mi hanno indicato anche sul libro.
    Non so ancora cosa sia un cast.
  • Re: Conversione da stringa ad intero

    wall87 ha scritto:


    è la conversione che mi hanno indicato anche sul libro.
    Cosa è che dice il libro, esattamente??

    wall87 ha scritto:


    Non so ancora cosa sia un cast.
    L'operatore di cast serve per fare una conversione di tipo esplicita

    (tipo) xyz
  • Re: Conversione da stringa ad intero

    Questo è il riepiloghetto che mi fa il libro sulla "conversione di tipo":
    In molte situazioni non è possibile memorizzare un valore di un tipo in una variabile di un altro tipo, a meno che non venga eseguita una conversione di tipo nel tipo di destinazione.

    Sintassi

    (tipo)espressione

    Esempio

    double supposizione = 7.8;
    int risposta = (int)supposizione;

    Il valore memorizzato nella variabile risposta sarà 7. Occorre notare che il valore è stato troncato e non arrotondato. Inoltre, la variabile supposizione non è cambiata in alcun modo: contiene ancora il valore 7.8. L'ultima istruzione di assegnamento riguarda solo il valore memorizzato in risposta.
  • Re: Conversione da stringa ad intero

    wall87 ha scritto:


    double supposizione = 7.8;
    int risposta = (int)supposizione;
    Questo è un cast esplicito obbligatorio. Un double NON è assegnabile direttamente ad un int. Accettando il "troncamento" dei decimali, solo mettendo un cast esplicito ad int puoi poi assegnare ad una variabile int.

    Mentre io prima parlavo della binary numeric promotion, che si applica agli operatori binari (nel senso di 2 operandi). Quindi:

    a + b
    a - b
    a * b
    a / b
    a == b
    (e altri ...)

    Dove

    unChar - unChar dà un int, perché entrambi gli operandi sono già portati implicitamente ad int.
Devi accedere o registrarti per scrivere nel forum
7 risposte