Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Confronto tra stringhe

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2017
    Messaggi
    3

    Confronto tra stringhe

    CIao, avrei bisogno di un aiuto per il seguente problema: Confrontare due parole inserite dall' utente e stamparne il massimo prefisso e suffisso comune.
    es:
    1 - pippo
    2 - pappo
    max prefisso: 'p'
    max suffisso: 'ppo'
    questo e' cio' che ho provato a fare, ma ricevo "string index out of range"
    codice:
    import java.util.*;
    
    public class PreSuf
    {
        public static void main (String args[])
        {
        Scanner sc = new Scanner(System.in);
        System.out.println("inserisci la prima parola");
        String parola1 = sc.nextLine();
        System.out.println("inserisci la seconda parola");
        String parola2 = sc.nextLine();
        
        String prefmax="";
        String sufmax="";
        
        for (int i=0; i<parola1.length(); i++)
        {
        for (int j=0; j<parola2.length(); j++)
        
        {
            if(parola1.charAt(i)==parola2.charAt(j)){
            prefmax+=parola1.charAt(i);
            }else{
            break;
            }
        }
        }
        for (int i=parola1.length(); i>0; i--)
        {
        for (int j=parola2.length(); j>0; j--)
        
        {
            if(parola1.charAt(i)==parola2.charAt(j)){
            sufmax+=parola1.charAt(i);
            }else{
            break;
            }
        }
        }
        System.out.println("prefisso massimo:" +prefmax);
        System.out.println("suffisso massimo:" +sufmax);
        }
        
    }

  2. #2
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Gli indici vanno da 0 a length() - 1, quindi se assegni i = parola1.length(), ma vale anche per j, charAt(i) sarà fuori dalla stringa
    Inoltre non mi pare che che abbia senso quello che fai. sarebbe più corretto:

    codice:
    int minLen = (parola1.length() < parola2.length()) ? parola1.length() : parola2.length();
    for(int i = 0; i < minLen; i++){
       if(parola1.charAt(i) != parola2.charAt(i)){
          break;
       }
        prefmax += parola1.charAt(i);
    }
    Cosa simile per il suffisso, anche se sarebbe il caso di trovare (partendo dalla fine) l'indice del ultimo (primo) elemento del suffisso e da questo prendere la sotto-stringa da una delle due parole

    PS: Tieni presente che è da tanto che non vedo java, quindi prendi con le molle il codice
    Ultima modifica di boots; 24-12-2017 a 20:04

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2017
    Messaggi
    3
    Quote Originariamente inviata da boots Visualizza il messaggio
    Gli indici vanno da 0 a length() - 1, quindi se assegni i = parola1.length(), ma vale anche per j, charAt(i) sarà fuori dalla stringa
    Inoltre non mi pare che che abbia senso quello che fai. sarebbe più corretto:

    codice:
    int minLen = (parola1.length() < parola2.length()) ? parola1.length() : parola2.length();
    for(int i = 0; i < minLen; i++){
       if(parola1.charAt(i) != parola2.charAt(i)){
          break;
       }
        prefmax += parola1.charAt(i);
    }
    Cosa simile per il suffisso, anche se sarebbe il caso di trovare (partendo dalla fine) l'indice del ultimo (primo) elemento del suffisso e da questo prendere la sotto-stringa da una delle due parole

    PS: Tieni presente che è da tanto che non vedo java, quindi prendi con le molle il codice
    Grazie, per il suffisso ho fatto un contatore c=minLen.length() -> c-- e da li prendo la substring.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da _Mallo_ Visualizza il messaggio
    codice:
        for (int i=0; i<parola1.length(); i++)
        {
        for (int j=0; j<parola2.length(); j++)
        {
    
    
        for (int i=parola1.length(); i>0; i--)
        {
        for (int j=parola2.length(); j>0; j--)
        {
    Nota che per determinare prefisso/suffisso comune NON c'è affatto bisogno di fare cicli "annidati"!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java 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 © 2024 vBulletin Solutions, Inc. All rights reserved.