[java]vocali e cicli annidati

di il
6 risposte

[java]vocali e cicli annidati

Ciao sto svolgendo un esercizio...e mi sto perdendo in un bicchiere d'acqua.Devo trovare le consonanti in una parola.L'ho già risolto con un ciclo switch e viene tutto..poi per curiosità e per completezza ho provato a realizzarlo con un array e due cicli for anidati,ma non viene e non capisco perchè

import java.util.Scanner;
class Consonanti{
public static void main(String[] args){
Scanner sc=new Scanner (System.in);
String s=sc.nextLine();
String d=s.toUpperCase();
char y[]={'A','E','I','O','U'};
char t;
for(int pos=0;pos<d.length();pos++){//pos parola
	t=d.charAt(pos);
	for(int pos1=0;pos1<y.length;pos1++)
		if((t!=(y[pos1])))
		  System.out.println(t);
   }
}
}
dov'è che sbaglio?

6 Risposte

  • Re: [java]vocali e cicli annidati

    for(int pos1=0;pos1<y.length;pos1++)
          if((t!=(y[pos1])))
            System.out.println(t);
    Significa: se il carattere pos-esimo della tua stringa è diverso dalla vocale pos1-esima, allora stampa il carattere.
    E' davvero ciò che vuoi fare?
  • Re: [java]vocali e cicli annidati

    Io volevo confrontare il carattere alla pos-esima con tutto l'array...quindi è sbagliato il secondo ciclo for giusto?
  • Re: [java]vocali e cicli annidati

    Ipotizziamo che il carattere che stai considerando al momento sia 'O'. Allora cosa succede?
    'O' è diverso da 'A', quindi stampa 'O'; 'O' è diverso da 'E', quindi stampa 'O'; 'O' è diverso da 'I', quindi stampa 'O'; 'O' è uguale a 'O', quindi esci dal ciclo.
  • Re: [java]vocali e cicli annidati

    Ciao grazie per la tua pazienza...solo come posso far si che venga eseguito un controllo su ogni singolo carattere dell'array senza che mi stampi le stesse lettere?Non si può non usare if.
    Ho riprovato a rifalo ma ovviamente senza alcun successo.
    
    import java.util.*;
    class Consonanti{
    public static void main(String[] args){
    Scanner sc=new Scanner (System.in);
    String s=sc.nextLine();
    String d=s.toUpperCase();
    char y[]={'A','E','I','O','U'};
    for(int pos=0;pos<d.length();pos++){//pos parola
    	char t=d.charAt(pos);
    	for(int pos1=0;pos1<y.length;pos1++){//pos array
    			if(t!=y[pos1]){
    				y[pos1]=t;
    			}
    		
    			System.out.println(y[pos1]);
    			}
    	}
    }
    }		
    
  • Re: [java]vocali e cicli annidati

    Fai così:
    import java.util.*;
    public class Consonanti{
        public static void main(String[] args){
            Scanner sc=new Scanner (System.in);
            String s=sc.nextLine();
            s=s.toUpperCase(); //non c'è bisogno di dichiarare una nuova stringa,
            char[] vocali[]={'A','E','I','O','U'}; //dai alle variabili dei nomi che indicano il loro "contenuto"
    
            for(int i=0; pos<s.length(); i++){
                boolean flagVocale=false; 
                char c=s.charAt(i);
                for(int j=0; !flagVocale && j<vocali.length; j++) {
                    if(c==vocali[j]){
                        flagVocale=true;
                    }
                }
                if(!flagVocale) {
                    //se sono entrato in questo if significa che il carattere c è una consonante
                    System.out.println(c);
                }
            }
        }
    }
    In questo modo stampi il carattere in posizione "i" una sola volta e solo se non è una vocale

    Poi, volendo, potresti evitare di crearti l'array con le vocali e il doppio for scrivendo:
    for(int i=0; i<s.lenght(); i++) {
        char c=s.charAt(i);
        if(c!='A' && c!='E' && c!='I' && c!='O' && c!='U') {
            System.out.println(c);
        }
    }
  • Re: [java]vocali e cicli annidati

    Ciao grazie 1000 della risposta davvero gentilissimo
Devi accedere o registrarti per scrivere nel forum
6 risposte