Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    14

    Confrontare al rovescio due stringhe

    Devo scrivere un programma che chieda di inserire due stringhe e verifichi che una sia il contrario dell'altra.
    Vi posto il mio codice, mi spieghereste dove è sbagliato il ciclo?


    codice:
    String a = JOptionPane.showInputDialog("Inserisci una stringa");
    		String b = JOptionPane.showInputDialog("Inserisci una seconda stringa");
    		a = a.toLowerCase();
    		b = b.toLowerCase();
    		
    		char numA [];
    		numA = a.toCharArray();
    		char numB [];
    		numB = b.toCharArray();
    		System.out.println(numA.length);
    		System.out.println(numB.length);
    				
    		
    		if (numA.length == numB.length)
    		{
    			for (int ct=0; ct<=numA.length; ct++)
    				for (int ct1 = numA.length; ct1>=numA.length; ct1--)
    				{
    					if (numA[ct]==numB[ct1])
    						System.out.println("Le due stringhe sono una il rovescio dell'altra");
    					else
    					System.out.println("Le due stringhe non sono una il contrario dell'altra");
    				}
    			
    		}
    		else
    			System.out.println("Le due stringhe non sono una il rovescio dell'altra ");

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    14
    Ho trovato un primo errore nella dichiarazione del ciclo for e l'ho corretto così

    codice:
    if (numA.length==numB.length)
    		{
    			for (int ct=0; ct<numA.length; ct++)
    				for (int ct1 = numB.length-1; ct1>0; ct1--)
    				{
    					if (numA[ct] == numB[ct1])
    						System.out.println("Le due stringhe sono una il rovescio dell'altra");
    					else
    					System.out.println("Le due stringhe non sono una il contrario dell'altra");
    				}
    	
    		}		
    		else
    			System.out.println("Le due stringhe non sono una il contrario dell'altra");
    ma continua a non funzionare.

  3. #3
    Ti basta solo un ciclo per risolvere il problema.
    Inoltre, puoi evitare di fare questa chiamata a.toCharArray(), visto che puoi operare direttamente sulle stringhe.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    14
    Ho modificato il ciclo così

    codice:
    		if (a.length()==b.length())
    		{
    			for (char ct = a.charAt(0); ct<=a.length(); ct++ )
    			{
    				if (ct == b.charAt(b.length()-1))
    					System.out.println("Le due stringhe sono una il contrario dell'altra");
    				else
    					System.out.println("Le due stringhe non sono una il rovescio dell'altra");
    ma adesso non ci entra dentro. Continua a mancarmi qualcosa. Come faccio a dirgli che poi deve confrontare il secondo carattere della stringa a con il penultimo della stringa b?

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da 44danni
    Continua a mancarmi qualcosa. Come faccio a dirgli che poi deve confrontare il secondo carattere della stringa a con il penultimo della stringa b?
    Innanzitutto si verifica che le due stringhe abbiano lunghezza uguale, questa è una condizione essenziale (non solo concettualmente ma anche per poter fare un solo ciclo).

    Poi puoi decidere se usare due indici, uno che parte da 0 (e si incrementa) e l'altro che parte dal fondo (e si decrementa), oppure se usare un solo indice e dedurre l'altro da lunghezza-indice-1.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    14
    Innanzitutto si verifica che le due stringhe abbiano lunghezza uguale, questa è una condizione essenziale (non solo concettualmente ma anche per poter fare un solo ciclo).
    non è giusto come ho già scritto?

    codice:
    if (a.length()==b.length())
    optando per un solo ciclo, l'ho impostato così;

    codice:
    for (char ct = a.charAt(0); ct<=a.length(); ct++ )
    ma pare che non entri all'interno. Per decrementare l'indice della seconda stringa ho bisogno di una variabile di appoggio?
    Non riesco a raccapezzarmi.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    14
    Visto che il programma non entra proprio nel ciclo credo che il problema sia nella dichiarazione del ciclo stesso.
    Il mio dubbio è;
    scrivendo
    codice:
    for (char ct = a.charAt(0); ct<=a.length(); ct++ )
    l'incremento lo assegno al carattere della stringa?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da 44danni
    non è giusto come ho già scritto?

    codice:
    if (a.length()==b.length())
    Sì sì, questo è giusto. Rimarcavo solo la questione, non era una segnalazione di errore.

    Originariamente inviato da 44danni
    codice:
    for (char ct = a.charAt(0); ct<=a.length(); ct++ )
    ma pare che non entri all'interno. Per decrementare l'indice della seconda stringa ho bisogno di una variabile di appoggio?
    Non riesco a raccapezzarmi.
    No, nella istruzione del for non ti serve lavorare con un carattere ... ma con un indice!!

    Quindi inizia a fare un ciclo for in cui hai un indice int che parte da 0 e con condizione "finché è minore della lunghezza" (di a o di b è appunto lo stesso).

    Poi puoi decidere:
    a) Nella espressione di inizializzazione del for dichiarare due indici (un altro in più oltre a quanto indicato sopra) che parte dal fondo e nella espressione di update incrementare uno e decrementare l'altro.

    oppure

    b) Lasciare come ho detto sopra e nel ciclo dedurre l'altro da lunghezza-indice-1. Se vuoi usare una variabile di appoggio va bene ma in teoria non servirebbe.

    Quindi nel corpo del ciclo confronti un carattere di a con un carattere di b usando i due indici. Se i caratteri sono diversi, sai già che una stringa non è il contrario dell'altra. Ma se sono uguali, non sai ancora nulla, non puoi stampare alcun messaggio e devi andare avanti.
    Solo a fine ciclo, quando avrai verificato che tutti i caratteri sono uguali (in senso contrario all'altro) allora sai che sono il contrario.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    14
    Un passo alla volta riuscirò a risolvere tutti gli algoritmi di questo mondo.
    Ho modificato il codice in questo modo

    codice:
    if (a.length()==b.length())
    		{
    			for (int ct = 0, ct2 = b.length()-1; ct <a.length();ct++, ct2--)
    			{
    				if (ct!=ct2)			
    					System.out.println("Le due stringhe non sono una il rovescio dell'altra");
    				else
    					System.out.println("Le due stringhe sono una il rovescio dell'altra");
    			}	
    		}
    		else 
    			System.out.println("Le due stringhe non sono una il rovescio dell'altra");
    ma adesso confronta e stampa il risultato per ogni carattere. Ho provato a incrementare ct e decreentare ct2 dopo l'eslse ma non esce più dal ciclo

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da 44danni
    ma adesso confronta e stampa il risultato per ogni carattere. Ho provato a incrementare ct e decreentare ct2 dopo l'eslse ma non esce più dal ciclo
    No, non ci siamo. Nel tuo ultimo codice stai confrontando gli indici .... invece dei caratteri!

    Le espressioni nel for sono corrette, questo punto è ok. Ma non devi confrontare ct e ct2 (che sono gli indici), sono i caratteri a questi indici (uno in a e l'altro in b) che devi confrontare.

    E poi l'ho già detto prima ma lo ripeto meglio: non puoi/devi fare:

    codice:
    else
        System.out.println("Le due stringhe sono una il rovescio dell'altra");
    Se i due caratteri sono uguali, non sai ancora nulla del risultato complessivo finale.

    Il consiglio che posso darti è quello di incapsulare tutta questa logica in un metodo a parte che riceve i 2 String e restituisce un boolean. Così se trovi una differenza ritorni subito false e solo dopo la fine del ciclo puoi restituire true. (e chiaramente una stampa del risultato all'utente la fai nel metodo chiamante)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.