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

    Problema manipolazione String

    Salve a tutti! Ho notato un comportamento strano con questo apparentemente semplice codice
    codice:
    public String method1(){
         /*..............*/
        //chars array di caratteri non vuoto
        String output = "";
        for(int j=0; j<chars.length; j++){
    	    output = output+chars[j];
        }
        return output;
    }
    Praticamente ho bisogno di convertire un array di caratteri (chars) in una stringa (output).
    La stringa output viene poi memorizzata in un array di stringhe words

    codice:
    //words array di stringhe
    j++;
    words[j] = method1();
    E' l'array a comportarsi in maniera strana. Se voglio stampare tutte le parole di words
    In questo modo:
    codice:
    for(int i=0; i<words.length; i++){
    	System.out.println(i+"  "+words[i]);
    }
    Con words = {ciao, come, stai}
    Output:
    0 ciao
    1 come
    2 stai


    Ma in quest'altro modo:
    codice:
    for(int i=0; i<words.length; i++){
    	System.out.print(i+"  "+words[i]+"   ");
    }
    Con words = {ciao, come, stai}
    Output:
    0 ciao


    Perche' ?? E il resto che fine ha fatto?
    Riesce a stamparli bene se si aggiunge lo \n ma non posso stamparli sulla stessa linea.
    Credo che questo problema generi anche altri errori in altre parti del programma piu' complicate.

  2. #2
    Utente di HTML.it L'avatar di bstefano79
    Registrato dal
    Feb 2004
    Messaggi
    2,520
    quello che dice nell'ultima parte secondo me non ha senso, per quanto riguarda il metodo ti consiglio di fare così
    codice:
    public String method1(){
         /*..............*/
        //chars array di caratteri non vuoto
        String output = "";
        for(int j=0; j<chars.length; j++){
    	    output = output+(new String(chars[j]));
        }
        return output;
    }

  3. #3
    Originariamente inviato da bstefano79
    codice:
    public String method1(){
         /*..............*/
        //chars array di caratteri non vuoto
        String output = "";
        for(int j=0; j<chars.length; j++){
    	    output = output+(new String(chars[j]));
        }
        return output;
    }
    Probabilmente intendi
    codice:
    public String method1(){
         /*..............*/
        //chars array di caratteri non vuoto
        String output = new String(chars);
        return output;
    }
    Creando cosi' una stringa partendo dall'array di caratteri chars.
    Io avevo costruito la stringa ciclando sui caratteri che e' la stessa cosa anche se meno leggibile.
    Comunque il risultato e' lo stesso: quando vado a stampare l'array words di String mi stampa inspiegabilmente solo la prima stringa.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    anche

    codice:
    private String method(char words[]){
    StringBuffer buff = new StringBuffer("");
    
    for (int index = 0; index < words.length; index++){
        buff.append(words[index]); 
    }
    return buff.toString()
    }
    provalo con

    codice:
    char[]words = {'c','i','a','o',' ','c'}; //array di caratteri non vuoto

  5. #5

    Risolto

    Ho risolto il problema. Per chi fosse interessato era qui:
    codice:
    public String method1(){
         /*..............*/
        //chars array di caratteri non vuoto
        String output = "";
        for(int j=0; j<chars.length; j++){
    	    output = output+chars[j];
        }
        return output;
    }
    In effetti i puntini sono cruciali, il problema e' nella costruzione dell'array chars che viene parzialmente riempito.
    Bastava iterare invece che su l'intero array su il numero effettivo di caratteri presenti.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    scusa non ho capito le differenze tra i due algoritmi, e li ho guardati per un bel pezzo....cosa hai cambiato??

  7. #7
    Nulla! Il codice che ho riportato e' uguale.
    Concettualmente non e' sbagliato, il problema e' che l'array chars era parzialmente pieno.
    Quindi bisogna iterare invece che su tutto l'array solo sui caratteri. Basta cambiare la condizione del for i<chars.length con i<n dove n e' il numero di caratteri inseriti nell'array.

  8. #8
    Originariamente inviato da pier_IP
    Concettualmente non e' sbagliato, il problema e' che l'array chars era parzialmente pieno.
    Quindi bisogna iterare invece che su tutto l'array solo sui caratteri. Basta cambiare la condizione del for i<chars.length con i<n dove n e' il numero di caratteri inseriti nell'array.
    Ok, però devi precisare che se i null assumono posizioni minori ad n, allora questa soluzione non va bene.
    Va specificato perchè non conosciamo l'implementazione.

  9. #9
    Ok, però devi precisare che se i null assumono posizioni minori ad n, allora questa soluzione non va bene. Va specificato perchè non conosciamo l'implementazione
    Esatto! Durante l'acquisizione dei caratteri c'era un contatore che veniva incrementato ad ogni nuovo carattere inserito in chars.

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.