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

    metodo per verificare se stringa è palindroma

    ho questo metodo
    codice:
    public static boolean isPalin(String pa,int x,int y)
    {
        if(x>=y)return true;
        if(pa.charAt(x)==pa.charAt(y))return isPalin(pa, x+1,y-1);
        return false;
    }
    con x indico la lunghezza minima della stringa,cioè 0.
    con y indico la lunghezza massima,cioè pa.lengh()-1.
    usando x e y in questo modo mi trovo,la verifica funziona.Tuttavia ho notato un problema. se metto un qualunque x maggiore di y mi dice che la stringa è palindroma...come posso risolvere questo problema?




    è in java

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    è in java
    Quindi è nel posto sbagliato ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: metodo per verificare se stringa è palindroma

    Originariamente inviato da rossonero922
    ho questo metodo
    public static boolean isPalin(String pa,int x,int y)

    {
    if(x>=y)return true;
    if(pa.charAt(x)==pa.charAt(y))return isPalin(pa, x+1,y-1);
    return false;
    }
    con x indico la lunghezza minima della stringa,cioè 0.
    con y indico la lunghezza massima,cioè pa.lengh()-1.
    usando x e y in questo modo mi trovo,la verifica funziona.Tuttavia ho notato un problema. se metto un qualunque x maggiore di y mi dice che la stringa è palindroma...come posso risolvere questo problema?
    x e y non sono lunghezze, sono gli indici di due caratteri specifici: il primo e l'ultimo, il secondo e il penultimo ecc...

    La condizione x >= y è giusto che lavori così, serve ad interrompere la ricorsione. Se però hai la stringa "ciao" e passi ad esempio 10 e 4 il risultato sarà ovviamente sbagliato. Questo perché la tua funzione isPalin() deve sapere TROPPE cose.

    La soluzione è rendere privato quel metodo e fornirne una versione sovraccaricata che passa il minimo indispesabile (la stringa):

    codice:
    public class MyUtils {
    
    	public static boolean isPalin(String s) {
    		return isPalin(s, 0, s.length() - 1);
    	}
    
    	private static boolean isPalin(String s, int x, int y) {
    		if (x >= y) {
    			return true;
    		}
    
    		return s.charAt(x) == s.charAt(y) ? isPalin(s, x + 1, y - 1) : false;
    	}
    
    }
    Poi nel tuo main chiamerai la versione pubblica del metodo, MyUtils.isPalin("ciao");
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4

    Moderazione

    Originariamente inviato da oregon
    Quindi è nel posto sbagliato ...

    Inoltre, il codice va postato tra tag [CODE] ... [/CODE]; ora correggo e sposto io, in futuro ricordatene.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    grazie mille!!!!!!!!!io avevo risolto cosi...mi dici che ne pensi?direttamente nel main...il metodo l ho tenuto uguale e poi ho fatto cosi:
    codice:
     
    public static void main(String[] args) {
    String a="osso";
    int x=0;
    int y=a.length()-1;
    try{
    	assert y>x;
    }catch(AssertionError e)
    {
    	System.err.println("si è verificata l eccezione,il programma sarà abortito");
    	System.exit(-1);
    }
    
    System.out.print(isPalin(a,x,y));
    	}

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Pessimo l'uso di assert: è una direttiva da abilitare appositamente (di default non è attiva) e che va usata solo in fase di debug.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    sii l ho abilitata...comunque grazie mille lo stesso....se non è corretto il suo uso userò il metodo di overload scrittomi sopra

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.