Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Anagramma in java

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    31

    Anagramma in java

    Salve a tutti ragazzi ho cominciato da poco a programmare in java e sto avendo un problemino in un esercizio riguardo tutti i possibili anagrammi di una parola!!!questo è il codice:
    codice:
    /*Scrivere un breve programma in java che dia in uscita tutte le possibili stringhe 
    formate utilizzando una sola volta i caratteri 'c' ,'a' ,'r' ,'b' ,'o' ,'n' */
    
    import java.util.Scanner;
    import java.io.*;
    import java.lang.*;
    
    public class Anagramma 
    {
    	public static String parola;
    	public static void aNagramma(String txt)
    	{
    		char [] array=txt.toCharArray();
    		int length=txt.length();
    		char temp;
    		//caso base parola di una sola lettera
    		if(txt.length()==1)
    			System.out.println("la parola ha solo una lettera.....che vuoi anagrammare?!?");
    		else
    			for(int i=0;i<=array.length;i++)
    			{
    				temp=array[i];
    				array[i]=array[0];
    				array[0]=temp;
    				String sottoStringa=String.copyValueOf(array,1,length);
    				aNagramma(sottoStringa);
    				System.out.println(array[0] +sottoStringa);
    			}
    	}
    	public static void main(String args[])
    	{
    		Scanner s=new Scanner(System.in);
    		System.out.print("Inserisci la parola da anagrammare: ");
    		parola=s.next();
    		aNagramma(parola);
    		
    	}
    }
    L'errore credo di aver capito sia nel metodo aNagramma!!però non riesco a capire come poterlo modificare!!Grazie a tutti per l'aiuto!!

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    68
    Provando il tuo codice mi esce questo errore:
    codice:
    Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 5
    	at java.lang.String.<init>(String.java:211)
    	at java.lang.String.copyValueOf(String.java:2880)
    	at Test.aNagramma(Test.java:25)
    	at Test.main(Test.java:35)
    Si capisce molto bene che il motivo dell'errore è dovuto all'accesso all'array oltre i propri confini, causato quando nella dichiarazione del ciclo for definisci come condizione di fine ciclo i <= array.length. Nel tuo caso dovrebbe essere soltanto i < array.lenght, in quanto l'indicizzazione di un array in Java inizia da 0 e l'ultimo elemento è array.lenght - 1. Tuttavia il tuo codice nonostante questo continua a non funzionare e onestamente non capendo molto quello che fai all'interno del ciclo for ti propongo questa soluzione:
    codice:
    /*Scrivere un breve programma in java che dia in uscita tutte le possibili stringhe 
    formate utilizzando una sola volta i caratteri 'c' ,'a' ,'r' ,'b' ,'o' ,'n' */
    
    import java.util.Scanner;
    import java.io.*;
    import java.lang.*;
    
    public class Test 
    {
    	public static String parola;
    	public static void aNagramma(String txt)
    	{
    		char [] array=txt.toCharArray();
    		int length=txt.length();
    		char temp;
    		//caso base parola di una sola lettera
    		if(txt.length()==1) {
    			System.out.println("la parola ha solo una lettera.....che vuoi anagrammare?!?");
    		} else {
    			for(int i = 0, j = array.length - 1; i <= j; i++, j--) {
    				if (array[i] != array[j]) {
    					System.out.println(array[i] + "!=" + array[j]);
    					System.out.println("La parola non è un anagramma");
    					System.exit(0);
    				}	
    			}
    		
    			System.out.println("La parola è un anagramma");
    		}	
    	}
    	public static void main(String args[])
    	{
    		Scanner s=new Scanner(System.in);
    		System.out.print("Inserisci la parola da anagrammare: ");
    		parola=s.next();
    		aNagramma(parola);
    		
    	}
    }

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    31
    Grazie innanzitutto per la risposta!
    Ho provato ad avviare il tuo codice...però non capisco bene l'output! Il codice in pratica confronta il primo carattere con l'ultimo e dopo aver verificato che sono diversi termina l'esecuzione. Forse mi sono espresso male dovuto al fatto che sono ancora molto inesperto, ma vorrei capire come poter scrivere un algoritmo ricorsivo che effettui tutti i possibili anagrammi di una parola inserita dall'utente. Il ciclo for del mio codice che non si capisce bene in pratica dovrebbe spezzettare ogni volta la parola e ricomporla con le lettere in ordine diverso in maniera ricorsiva...ma molto probabilmente ho scritto solo un'accozzaglia di codice!

    Grazie mille!

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2010
    Messaggi
    68
    Il mio codice come naturalmente hai notato non è ricorsivo e semplicemente controlla che la parola sia un anagramma sfruttando la proprietà di simmetria di quest'ultima. Ovvero ad ogni ciclo vengono confrontate le lettere estreme e se tutte sono uguali si esce dal ciclo stampando che la parola è un anagramma, viceversa se invece anche solo una coppia è diversa puoi sicuramente affermare che non si tratta di un anagramma e di conseguenza esci. In pratica succede questo:
    codice:
    input: abcba
    
    1 ciclo: le due a vengono confrontate
    2 ciclo: le due b vengono confrontate
    Si esce dal ciclo for e si stampa che "abcba" è un anagramma
    
    input: abcxba
    
    1 ciclo: le due a vengono confrontate
    2 ciclo: le due b vengono confrontate
    3 ciclo: la c viene confrontata con la x ed essendo diverse si esce dal ciclo e dal programma
    Per quanto riguarda una soluzione ti consiglio di orientarti verso una soluzione analoga a quella implementata con il ciclo for.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    31
    Aspetta hai capito male!!A me interessa creare un algoritmo per conoscere tutte le possibili permutazioni delle lettere di una parola data in input!!! esempio: "mio" -> omi,oim,imo,iom,moi ecc..... non mi interessa sapere se la parola è palindroma!!

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.