Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    72

    [java] perchè rovescia due stringhe?

    salve a tutti... scusate ma ho iniziato da poco a studiare il java e mi si è presentato un problemino che non riesco a capire da cosa sia causato...

    codice:
    BufferedReader tastiera = new BufferedReader(new InputStreamReader(System.in));
    
    StringBuffer frase = new StringBuffer (tastiera.readLine());
    StringBuffer rovescia = new StringBuffer();
    
    rovescia = frase;
    rovescia.reverse();
    System.out.println( frase );
    System.out.println( rovescia );
    se immetto ciao l'output è:
    oaic
    oaic

    Qualcuno può aiutarmi??
    " Abbiamo due orecchie ed una sola bocca, proprio perché dobbiamo ascoltare di più e parlare di meno "

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Bisogna tenere presente una cosa: stiamo lavorando con degli oggetti. Questo dignifica che quando esegui la quarta istruzione
    codice:
    rovescia = frase;
    fai in modo che rovescia punti alla stessa locazione di memoria a cui punta frase. Quindi, qualsiasi metodo richiamato sull'oggetto rovescia è come se venisse chiamato sull'oggetto frase. Praticamente tu hai un solo oggetto (la stringa) e 2 puntatori ad essa: frase e rovescia.

    Quando, poi, stampi il valore di frase e di rovescia stampi lo stesso oggetto.

    Per ottenere l'effetto che volevi tu, dovresti fare così:
    codice:
    BufferedReader tastiera = new BufferedReader(new InputStreamReader(System.in));
    
    StringBuffer frase = new StringBuffer (tastiera.readLine());
    StringBuffer rovescia = new StringBuffer( frase );
    
    rovescia.reverse();
    System.out.println( frase );
    System.out.println( rovescia );
    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

  3. #3
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119

    Re: [java] perchè rovescia due stringhe?

    [QUOTE]Originariamente inviato da zenone
    salve a tutti... scusate ma ho iniziato da poco a studiare il java e mi si è presentato un problemino che non riesco a capire da cosa sia causato...

    codice:
    BufferedReader tastiera = new BufferedReader(new InputStreamReader(System.in));
    
    StringBuffer frase = new StringBuffer (tastiera.readLine());
    StringBuffer rovescia = new StringBuffer();
    
    rovescia = frase; 
    rovescia.reverse();
    System.out.println( frase );
    System.out.println( rovescia );
    Nella parte in grassetto la variabile rovescia va a puntare all'oggetto puntato dalla variabile frase (Condivisione...).
    Pertanto una modifica all'una o all'altra variabile andra' ad avere effetto (Indesiderato ) sull'altra.

    Potresti fare:
    codice:
    BufferedReader tastiera = new BufferedReader(new InputStreamReader(System.in));
    
    StringBuffer frase = new StringBuffer (tastiera.readLine());
    StringBuffer rovescia = new StringBuffer(frase);
    
    rovescia.reverse();
    System.out.println( frase );
    System.out.println( rovescia );
    In questo modo rovescia punta ad un NUOVO oggetto il cui stato e' lo stesso dell'oggetto puntato dalla variabile frase.
    Essendo oggetti differenti una modifica all'uno o all'altro non procura... effetti collaterali...

  4. #4
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Azz... sono arrivato secondo...

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    72
    Ho fatto come mi avete consigliato e vi ringrazio per il vostro aiuto ma c'è un problema...
    Il mio compilatore ( Eclipse) non prende questa istruzione:

    codice:
    StringBuffer rovescia = new StringBuffer(frase);
    sapete perchè??
    " Abbiamo due orecchie ed una sola bocca, proprio perché dobbiamo ascoltare di più e parlare di meno "

  6. #6
    Utente di HTML.it L'avatar di Ed_Bunker
    Registrato dal
    Jul 2003
    Messaggi
    1,119
    Originariamente inviato da zenone
    Ho fatto come mi avete consigliato e vi ringrazio per il vostro aiuto ma c'è un problema...
    Il mio compilatore ( Eclipse) non prende questa istruzione:

    codice:
    StringBuffer rovescia = new StringBuffer(frase);
    sapete perchè??
    Dare un'occhiatina alle API , no ?!?

    Il costruttore (produttore) prende come parametro un oggetto di tipo String e non un StringBuffer.
    Sostituisci l'istruzione con:

    codice:
    StringBuffer rovescia = new StringBuffer(frase.toString());
    ciauz

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2004
    Messaggi
    72
    grazie... tutto risolto!!!
    ciao
    " Abbiamo due orecchie ed una sola bocca, proprio perché dobbiamo ascoltare di più e parlare di meno "

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 © 2024 vBulletin Solutions, Inc. All rights reserved.