Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 18 su 18

Hybrid View

  1. #1
    Se faccio così è sbagliato?
    codice:
    package caratteridiversi;
    import java.util.Scanner;
    public class caratteridiversi {
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      @SuppressWarnings("resource")
      Scanner in=new Scanner(System.in);
      String s;
      System.out.println("Inserisci una stringa");
      s=in.nextLine();
      int a;
      boolean p=true;
      for(int i=0;i<s.length()-1;i++)
      {
       a=s.charAt(i);
       for(int c=i+1;c<s.length();c++)
       {
        if(a!=s.charAt(c))
        {
         p=true;
        }
        else
        {
         p=false;
        }
       }
      }
      if(p)
      {
       System.out.println("La stringa è composta da caratteri diversi");
      }
      else
      {
       System.out.println("La stringa non è composta da caratteri diversi");
      }
      
     }
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Saverioapple Visualizza il messaggio
    Se faccio così è sbagliato?
    Sì, è sbagliato. Perché se trovi due caratteri uguali hai p=false ma appena ne trovi di diversi rimetti p=true. Quindi alla fine p a true non ti indica che sono tutti diversi!

    Devi solo mettere a false solo se trovi due caratteri uguali.

    P.S. Consiglio: fai un metodo apposito e potrai anche evitare la variabile boolean.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Sì, è sbagliato perché il booleano p può essere sovrascritto più volte. Invece tu vuoi uscire APPENA TROVI DUE CARATTERI UGUALI perché sai che a quel punto la stringa non può essere costituita da caratteri tutti diversi. Quindi setti il booleano a false e poi esci dal ciclo. Altrimenti c'è il rischio che quel booleano venga rimesso a true e che quindi ti venga stampato che la stringa è composta da caratteri diversi, anche se in precedenza il booleano era stato false...

  4. #4
    come faccio a uscire dal ciclo e a metterlo a false?

  5. #5
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Per semplicità puoi anche non uscire dal ciclo (anche se ovviamente è meno efficiente perché fai dei controlli inutili) ma la cosa importante è che tu non rimetta più a true il booleano. Quindi... elimina quella parte! Il booleano all'inizio vale true, poi l'unica operazione che puoi fare è quella di metterlo a false. E basta. Così sei sicuro che non tornerà mai ad essere true...

  6. #6
    Grazie mille per la risposta, alla fine la codifica giusta dovrebbe essere così
    codice:
    package caratteridiversi;
    import java.util.Scanner;
    public class caratteridiversi {
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      @SuppressWarnings("resource")
      Scanner in=new Scanner(System.in);
      String s;
      System.out.println("Inserisci una stringa");
      s=in.nextLine();
      int a;
      boolean p=true;
      for(int i=0;i<s.length()-1;i++)
      {
       a=s.charAt(i);
       for(int c=i+1;c<s.length();c++)
       {
        if(a==s.charAt(c))
        {
         p=false;
        }
       }
      }
      if(p)
      {
       System.out.println("La stringa è composta da caratteri diversi");
      }
      else
      {
       System.out.println("La stringa non è composta da caratteri diversi");
      }
      
     }
    }

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Saverioapple Visualizza il messaggio
    Grazie mille per la risposta, alla fine la codifica giusta dovrebbe essere così
    Sì, tecnicamente mi pare corretto. Salvo il fatto che anche dopo aver trovato una uguaglianza (p=false) comunque continui con tutti i cicli rimanenti.
    Per risolvere questa "inefficienza" avresti almeno 2 opzioni:
    - questa logica con i due for la metti in un metodo a sé stante, così puoi restituire subito false appena trovi una uguaglianza.
    - dopo p=false; mettere un break con "label" (etichetta), mettendo una etichetta al for più esterno.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    Sì, a occhio direi di sì anche se non l'ho provato.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.