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

    Array con dimensione modificabile e controllo di una cella vuota in un array di tipo char

    Salve, volevo solo dire che ho perso qualche oretta perchè ogni volta che scrivevo il testo passava un tot di tempo e inserendo la discussione mi faceva rifare login, login che alla fine non immetteva la discussione e ho dovuto di nuovo riscriverla, quindi se magari risolvete per non creare disagio ad altri utenti che scrivendo cose lunghe non riescono a postarle.
    Detto questo problema, parlo del mio dubbio. Volevo creare un metodo void che riceve un array di caratteri e ne riscrive uno nuovo stampando a schermo il carattere più frequente nelle celle dell'array ricevuto e quante volte questo carattere è stato trovato, il tutto senza importare librerie.
    Per far ciò ho due metodi di procedura: creo un array con dimensione dinamica che man mano viene riempito dai valori dell'array ricevuto e quindi di dimensione incerta. Ma mi dà errore in quanto l'array va inizializzato in partenza.
    Oppure do al nuovo array la stessa dimensione dell'array di partenza e immetto i valori una singola volta confrontatoli e verificando con 'if()' che il valore della cella in cui posso immettere un carattere sia 'null' quindi vuoto. Come potrei fare in questo caso?
    Es.
    for(int k=0; k<ArrayNuovo.length;k++)
    if (ArrayNuovo[k]=='null') ... ... ... ...

    Questa istruzione Java non l'accetta.
    Non ho particolari necessità di creare questo metodo, ma mi sono domandato se riuscissi a farlo e mi sono messo alla prova. Grazie per eventuali risposte.
    Ultima modifica di Pierfrank; 23-06-2015 a 20:14

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    In che senso senza importare nessuno librerie...?
    Utilizza nomi fully qualified e utilizza una bella java.util.HashMap<Character, Integer>.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    In che senso senza importare nessuno librerie...?
    Utilizza nomi fully qualified e utilizza una bella java.util.HashMap<Character, Integer>.
    Nel senso senza fare nessun import java.util. ecc ecc appunto.
    Per il secondo quesito ho trovato risposta. Per verificare se una cella di un array di char è vuota bisogna usare '\0' , quindi per verificare nel mio caso, non bisogna utilizzare 'null' ma:
    if(ArrayNuovo[k]=='\0')
    ... ... ...
    Ora l'unica cosa è sapere se si può creare una array di dimensione ingrandibile,o meglio con l'intromissione di caratteri che man mano ad ogni ciclo del 'for' aggiungono celle ad un array non inizializzato.

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Ma non ti serve fare un import :O
    Ti basta usare nomi fully qualified.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Ma non ti serve fare un import :O
    Ti basta usare nomi fully qualified.
    scusa potresti essere più preciso su i nomi fully qualified?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Pierfrank Visualizza il messaggio
    Nel senso senza fare nessun import java.util. ecc ecc appunto.

    scusa potresti essere più preciso su i nomi fully qualified?
    Generalmente si fa:
    codice:
    import java.util.HashMap;
    
    ...
        HashMap<Character,Integer> mappa = new HashMap<Character,Integer>();

    Oppure senza import:

    codice:
    java.util.HashMap<Character,Integer> mappa = new java.util.HashMap<Character,Integer>();

    Insomma si usa il nome completamente qualificato ovunque.


    Quote Originariamente inviata da Pierfrank Visualizza il messaggio
    Per il secondo quesito ho trovato risposta. Per verificare se una cella di un array di char è vuota bisogna usare '\0'
    Questo è il carattere nullo, con valore 0.

    Fare:
    char c = 0;
    oppure
    char c = '\0';

    è esattamente la stessa cosa.

    Quote Originariamente inviata da Pierfrank Visualizza il messaggio
    Ora l'unica cosa è sapere se si può creare una array di dimensione ingrandibile
    Gli array NON sono espandibili. Una volta istanziato un array, la sua dimensione non può cambiare. Quello che si può fare è creare un nuovo array di dimensione maggiorata e ricopiare gli elementi dal vecchio array al nuovo e poi "buttare" via il reference all'array vecchio.
    Questo è infatti quello che succede dentro collezioni come ArrayList/Vector, che internamente usano un array ma la collezione in sé è espandibile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Generalmente si fa:
    codice:
    import java.util.HashMap;
    
    ...
        HashMap<Character,Integer> mappa = new HashMap<Character,Integer>();

    Oppure senza import:

    codice:
    java.util.HashMap<Character,Integer> mappa = new java.util.HashMap<Character,Integer>();
    quindi questa istruzione come può tornarmi utile nel mio caso?

    Quote Originariamente inviata da andbin Visualizza il messaggio
    Gli array NON sono espandibili. Una volta istanziato un array, la sua dimensione non può cambiare. Quello che si può fare è creare un nuovo array di dimensione maggiorata e ricopiare gli elementi dal vecchio array al nuovo e poi "buttare" via il reference all'array vecchio.
    Questo è infatti quello che succede dentro collezioni come ArrayList/Vector, che internamente usano un array ma la collezione in sé è espandibile.
    Ma nella mia situazione in cui devo creare un array nuovo con i caratteri presenti nell'array ricevuto, però inseriti una singola volta senza ripetizioni, come posso fare?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Pierfrank Visualizza il messaggio
    quindi questa istruzione come può tornarmi utile nel mio caso?
    Sinceramente non lo so ... non l'ho capito. Tu dici "senza fare nessun import java.util". Cosa vuol dire?

    a) Non puoi usare nulla di java.util (potrebbe essere una restrizione lecita/sensata in certe esercitazioni "didattiche"). Quindi ha senso.
    b) Puoi usare cose in java.util ma senza fare gli import (questo ha meno senso).
    ?

    Quote Originariamente inviata da Pierfrank Visualizza il messaggio
    Ma nella mia situazione in cui devo creare un array nuovo con i caratteri presenti nell'array ricevuto, però inseriti una singola volta senza ripetizioni, come posso fare?
    Se hai un array e vuoi aggiungere nuovi elementi in più devi per forza fare come ho detto.

    Esempio banale: vuoi espandere un array int[] di 1 elemento per contenere un nuovo int. Il consiglio è quello di incapsulare questa logica in un metodo di "utilità" (se non addirittura di creare una classe per un array "espandibile", un simil-ArrayList ma per int, per intenderci):

    codice:
    public static int[] aggiungiValore(int[] arr, int valore) {
        // Istanzia nuovo array di dimensione +1
        // Ricopia gli elementi dal vecchio e setta al fondo il nuovo valore
        // Restituisci il nuovo array
    }

    Ed è poi compito/facoltà del chiamante assegnare il valore di ritorno alla stessa variabile in modo da "buttare" via il reference al vecchio array.

    Tutto qui.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.