Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    6

    [JAVA]Verifica Esistenziale Array

    Salve a tutti mi sto preparando per l'esame di informatica e un esercizio mi chiedeva il seguente:

    A5: definire un metodo che, verifica la presenza di almeno una stringa, costituita da caratteri dell'alfabeto inglese e alternati maiuscolo e minuscolo(con il primo carattere maiuscolo), all'interno di un array di stringhe. Nel commento iniziale scrivere il tipo di verifica.

    Ho sviluppato il codice e compilato senza che mi dia alcun tipo di errore tuttavia eseguendolo non ottengo il risultato desiderato, ovvero non mi stampa il messaggio in System.out.println...
    Dove ho sbagliato?

    codice:
    public class VerificaEsistenziale{   public static void main(String[] args){
    
    
          String[] a= new String[]{"MaTtEo","jiL","lol"};
          VerificaEsistenziale.verifica(a);
          }
    
    
       public static void verifica(String[] a){
          int i;
    
    
          for(i=0;i<3;i++){
              if(VerificaEsistenziale.esistenza(a[i])){
                System.out.println("Esiste almeno una stringa costituita da caratteri dell'alfabeto inglese e alternati maiuscolo e minuscolo(con il primo carattere maiuscolo)");
                break;
              }
          }
       }
    
    
       public static boolean esistenza(String s){
    
    
           String maiusc="ABCDEFGHILMNOPQRSTUVJKZXY";
           String minusc="abcdefghilmnopqrstuvykjxz";
           int b;
           int j;
           int k=0;
           int n=0;
           int contatore=0;
           boolean esistenza=false;
    
    
    
    
           for(b=0;b<s.length();b=b+n){
             for(j=0;j<maiusc.length();j++){
                if(s.charAt(b)==maiusc.charAt(j))
                 contatore++;
             }
           n++;
           b++;
           }
           for(b=1;b<s.length();b=b+k){
             for(j=0;j<minusc.length();j++){
               if(s.charAt(b)==minusc.charAt(j))
                contatore++;
             }
           k++;
           b++;
           }
    
    
           if (contatore==s.length())
             esistenza=true;
    
    
          return esistenza;
      }
    
    }
    Ultima modifica di R3m; 03-08-2015 a 16:18

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da R3m Visualizza il messaggio
    Ho sviluppato il codice e compilato senza che mi dia alcun tipo di errore tuttavia eseguendolo non ottengo il risultato desiderato, ovvero non mi stampa il messaggio in System.out.println...
    Dove ho sbagliato?
    Innanzitutto, non "cablare" le lunghezze

    for(i=0;i<3;i++){

    Usa il length dell'array.

    Poi comunque il metodo esistenza è abbastanza contorto/fumoso. Suggerimento, fai innanzitutto un piccolo metodo es. boolean testLettera(char ch, boolean maiuscola)
    Poi mentre scansioni le lettere della stringa, se l'indice è "pari" (0,2,4,...) ti aspetti una maiuscola (testLettera(ch, true) ), altrimenti ti aspetti una minuscola. E non devi nemmeno fare if per i due casi ... basta che il modulo 2 dell'indice sia 0.
    Diventa di una banalità disarmante ....
    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
    Registrato dal
    Aug 2015
    Messaggi
    6
    Innanzitutto grazie mille per la risposta, mi sarebbe piaciuto capire dove ho sbagliato ma in ogni caso proverò a riscriverlo seguendo il tuo suggerimento.
    Non riesco a capire però come posso fare a controllare se ad un determinato indice corrisponde una lettera maiuscola/minuscola senza dover necessariamente confrontare una stringa composta da tutte maiuscole/minuscole ("ABCDEFGHILMNOPQRSTUVXJYK")
    Esiste qualche modo più rapido?

    grazie per la pazienza.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da R3m Visualizza il messaggio
    Non riesco a capire però come posso fare a controllare se ad un determinato indice corrisponde una lettera maiuscola/minuscola senza dover necessariamente confrontare una stringa composta da tutte maiuscole/minuscole ("ABCDEFGHILMNOPQRSTUVXJYK")
    Esiste qualche modo più rapido?
    Le due stringhe letterali "ABC....Z" e "abc.....z" le puoi certamente tenere, non è quello il punto. Con il metodo che ti ho detto io (testLettera) cerchi il carattere o in una o nell'altra, in base chiaramente al flag maiuscolo.
    Poi come lo cerchi .... puoi usare un banale for oppure puoi sfruttare il indexOf di String (se ti è permesso usarlo ai fini della esercitazione).
    Se vuoi evitare questa ricerca, devi controllare il valore del char, banalmente verificando che sia tra 'A' e 'Z' oppure tra 'a' e 'z'.

    E ripeto: quando scansioni la stringa da verificare, se indice 0 testLettera(ch, true), se 1 testLettera(ch, false), ecc... E per questo non hai nemmeno bisogno di un if.
    Se restituisce false, sai già che la stringa NON è il caso richiesto dall'esercizio.
    Ultima modifica di andbin; 03-08-2015 a 17:32
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2015
    Messaggi
    6
    chiarissimo sei il numero uno grazie!

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da R3m Visualizza il messaggio
    mi sarebbe piaciuto capire dove ho sbagliato
    L'errore è qui:

    codice:
    for(b=0;b<s.length();b=b+n){
             for(j=0;j<maiusc.length();j++){
                if(s.charAt(b)==maiusc.charAt(j))
                 contatore++;
             }
           n++;
           b++;
           }
    


    Scrivi b=b+n nell' istruzione di incremento del for, poi ad ogni passo aumenti sia b,sia n.Quindi b vale in ordine 0,2,5,9,14 ...

    Se tu nell'istruzione di incremento scrivi invece b=b+2 (o b+=2)e togli sia n++; sia b++; tutto funziona correttamente.
    Lo stesso vale per il ciclo delle minuscole.


    In ogni caso, se non sai dove è un errore in un ciclo, un semplice print dentro il ciclo ti fa capire dove hai qualcosa che non ti aspetti (ma è meglio se segui i consigli sopra e crei metodi ad hoc) .

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.