Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Poker1
    Registrato dal
    Jul 2002
    Messaggi
    479

    [JAVA] Rovesciare una stringa

    Ciao a tutti, ho fatto questo semplice programmino per rovesciare una stringa, ma quando vado a mandare in out la stringa prodotta, mi scrive cose strane:

    codice:
    class StringUtils
    {
    	public static String reverse( String a )
    	{
    		char[] array = new char[a.length()];
    		
    		int from = 0, to = a.length() - 1;
    		
    		while( from <= to )
    		{
    			char tmp = a.charAt( from );
    			array[from] = a.charAt(to);
    			array[to] = tmp;
    			
    			from++;
    			to--;
    		}
    		
    		String newString = new String();
    		newString = array.toString();
    			
    		return newString;
    	}
    }
    Dove sbaglio?
    Grazie!!
    Non riscrivere la ruota, usa le librerie.
    by Bjarne Stroustrup
    EIDON SOFT MEMBER

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    29
    Il toString non va bene perchè ti restituisce una stringa con l'indirizzo di memoria dell'array, visto che non puoi ridefinire questo metodo. Quindi secondo me dovresti fare così:
    while( from <= to )
    {
    char tmp = a.charAt( from );
    array[from] = a.charAt(to);

    array[to] = tmp;

    from++;
    to--;
    }
    String newString = new String();
    for (int i = 0; i<array.length; i++)
    newString+=array[i];

    anzi... se vuoi sbrigarti ancora prima puoi fare anche così:

    class StringUtils{
    public static String reverse( String a ){
    int to = a.length() - 1;
    String newString = "";
    while(to>=0 ){
    newString+=a.charAt(to);
    to--;
    }
    return newString;
    }
    }

    ciao.

  3. #3
    Secondo me sbagli nelle operazioni dentro al while...io farei una cosa così:
    codice:
    class StringUtils
    {
    	public static String reverse(String a )
    	{
    		String newString = new String();
                    i = a.length() - 1;
    
    		while( i >= 0 )
    		{
    			newString = newString + a.charAt(i);
                            i--;
    		}
    		return newString;
    	}
    }
    Non l'ho provato ma dovrebbe funzionare ed è molto più semplice di quello che hai fatto tu...

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  4. #4
    Sono stato preceduto di qualche minuto...
    Comunque il suo codice è quello più veloce perchè, ammettendo che la stringa sia lunga n, il while viene ripetuto solo n/2 volte rispetto al nostro...diciamo che quello postato da noi è concettualmente più terra terra!

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    29
    Si però in quel modo non può utilizzare il metodo toString che gli restituisca la stringa unita... e quindi dovrebbe fare un altro ciclo di while (o for come gli ho postato) per crearsi la stringa..
    quindi penso sia più efficiente il secondo...

  6. #6
    Beh non serve fare un altro ciclo per riottenere la stringa, nella classe string c'è il metodo copyValueOf(char[] a) che serve apposta per questo!

    Ciao.
    Si può vincere o perdere, l'importante è vincere o perdere da uomini...

    Neverland - Il mio Forum

  7. #7
    Utente di HTML.it L'avatar di Angelo1974
    Registrato dal
    Feb 2003
    Messaggi
    1,107
    Al limite potresti fare così:

    String pippo = "Ciao a tutti";
    String contrario = ( new StringBuffer( pippo ) ).reverse().toString();
    Se vuoi trovare l'arcobaleno, devi sopportare la pioggia

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.