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

    Da array di byte a numero intero

    Ragazzi scusate ma devo risolvere un problema....
    in pratica avendo un array di byte es{1,2,3,4,5} e dovrei ritonare nel metodo che sto facendo il numero INTERO 12345.
    Suggerimenti?(magari anche il codice!!!!!Sono nuovo dell'ambiente java).
    Il computer è spettacolarmente veloce, accurato e stupido.....L'uomo è spettacolarmente lento, inaccurato e intelligente.Insieme formano una potenza oltre l'immaginazione

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Da array di byte a numero intero

    Originariamente inviato da mattodijava
    Ragazzi scusate ma devo risolvere un problema....
    in pratica avendo un array di byte es{1,2,3,4,5} e dovrei ritonare nel metodo che sto facendo il numero INTERO 12345.
    Ma è davvero semplice, lo spiego a parole. Tieni una variabile (es. 'res') per il risultato, inizialmente a 0.
    Prendi il primo valore (1), moltiplichi res per 10 e sommi valore (res era 0 ... ottieni 1).
    Prendi il secondo valore (2), moltiplichi res per 10 e sommi il valore (res era 1, per 10=10, poi più 2=12).
    Prendi il terzo valore (3), moltiplichi res per 10 e sommi il valore (res era 12, per 10=120, poi più 3=123).

    Hai già capito? Semplicemente moltiplichi per 10 ("sposti" a sinistra di una cifra il risultato) e poi ci sommi il valore. Ovviamente non fare le singole operazioni ripetute .... fai un ciclo for visto che hai un array!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    risposta

    Perfetto ma risulta se nell'array ho
    byte[] x={11,12,13,14,15};
    ?????
    a me sembra di no....
    Il computer è spettacolarmente veloce, accurato e stupido.....L'uomo è spettacolarmente lento, inaccurato e intelligente.Insieme formano una potenza oltre l'immaginazione

  4. #4

    esercizio risolto

    byte[] vett = {100,13,14,15,16};//10.013.141.516
    long res=0;
    for (int i = 0;i<vett.length; i++){
    if(vett[i]>100)
    res= ((res*1000)+vett[i]);
    else{
    if(vett[i]>10)
    res=((res*100)+ vett[i]);
    else
    res=((res*10)+ vett[i]);
    }

    }
    System.out.println(res);



    ti piace come corpo del metodo???
    il problema è che devo ritornare un int ma se nell'array ho valori che mi vanno da 100 a 127 sn fregato e la variabile res deve essere long...
    ma nn posso fare un cast perchè perdo di precizione
    come faccio????
    se è come penso io allora il prof è scemo e si deve ritornare un long.
    Il computer è spettacolarmente veloce, accurato e stupido.....L'uomo è spettacolarmente lento, inaccurato e intelligente.Insieme formano una potenza oltre l'immaginazione

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: esercizio risolto

    Originariamente inviato da mattodijava
    Perfetto ma risulta se nell'array ho
    byte[] x={11,12,13,14,15};
    ?????
    a me sembra di no....
    In questo caso no .... presupponevo che i valori fossero 0-9 (non avevi precisato!). Se sono di un range diverso, basta solo moltiplicare il risultato (prima della somma del valore) per 10^cifre_nuovo_valore. Se ad esempio devi "infilare" dietro un numero 123 è intuitivo pensare che il risultato devo prima moltiplicarlo per 1000 per fare spazio a 3 nuove cifre decimali!!!

    Originariamente inviato da mattodijava
    ti piace come corpo del metodo???
    Il concetto è quello. Ma ti segnalo che:
    - ci sono troppe parentesi che sono del tutto superflue
    - si poteva usare else if
    - la comparazione deve essere per >= ... non > (andrebbe bene > ma in tal caso devi scalare di 1, quindi 9, 99)

    E in modo estremo la operazione si poteva anche scrivere:

    codice:
    res = res * (vett[i] >= 100 ? 1000 : vett[i] >= 10 ? 100 : 10) + vett[i];
    Originariamente inviato da mattodijava
    il problema è che devo ritornare un int ma se nell'array ho valori che mi vanno da 100 a 127 sn fregato e la variabile res deve essere long...
    ma nn posso fare un cast perchè perdo di precizione
    Il massimo valore positivo di un int è 2147483647 ... di più non puoi andare (altrimenti ... overflow!).

    Originariamente inviato da mattodijava
    se è come penso io allora il prof è scemo e si deve ritornare un long.
    Non so cosa ti ha chiesto precisamente il prof. Nel senso che non posso certo sapere io quanti byte devi avere e con quali valori.

    Se ad esempio il prof ti ha detto di usare esattamente quella sequenza 100,13,14,15,16 e ti ha anche specificato di usare int (e non long) .... o il prof non sa il range di un int oppure voleva fregarti ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328

    Re: esercizio risolto

    Originariamente inviato da mattodijava
    ti piace come corpo del metodo???
    il problema è che devo ritornare un int ma se nell'array ho valori che mi vanno da 100 a 127 sn fregato e la variabile res deve essere long...
    ma nn posso fare un cast perchè perdo di precizione
    come faccio????
    se è come penso io allora il prof è scemo e si deve ritornare un long.
    Innanzitutto cerca di utilizzare i tag CODE quando posti del codice, così eviti quell'accozzaglia.

    In secondo luogo, se hai un array di questo tipo:

    codice:
    {11, 12, 13, 14}
    Che numero dovrebbe uscirti? Credo che andbin (come tutti qui dentro) avesse capito che ciascun elemento dell'array dovesse essere una cifra (valore tra 0 e 9), non un numero tra 0 e 255 (o 127, se signed)... altrimenti che senso avrebbe il tutto? E torna la domanda... che risultato dovrebbe dare l'algoritmo, con un array come quello dell'esempio che ho proposto sopra? Perchè le cose cambiano a seconda di quale risultato si accetta per buono...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    ragazzi grazie a tutti ho risolto il problema.
    chi ha inventato questo forum è un grande....................
    siete pure voi speciali che mi aiutate....
    Il computer è spettacolarmente veloce, accurato e stupido.....L'uomo è spettacolarmente lento, inaccurato e intelligente.Insieme formano una potenza oltre l'immaginazione

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da mattodijava
    ragazzi grazie a tutti ho risolto il problema.
    chi ha inventato questo forum è un grande....................
    siete pure voi speciali che mi aiutate....
    Bene... ora dovresti rispondere anche alle domande che ti sono state poste e fornire la soluzione che hai adottato, così da permettere di trovare la risposta ad un utente che avesse la tua stessa problematica.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.