Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [Java] errore con operatore logici

    Rieccomi di nuovo qui per la seconda volta in meno di 24 ore

    codice:
    import javax.swing.*;
    
    public class ex3_14 {
    
    
        public static void main(String[] args) {
            String s = JOptionPane.showInputDialog("inserisci una stringa");
            int lung = s.length();
            int cont = 0;
            char car;
            for (int i = 0; i < lung; i++) {
                  //if(s.charAt(i)=='a'||'e'||'i'||'o'||'u'){
                  car = s.charAt(i);
                 //if(car=='a'||'e'||'i'||'o'||'u'){
                if (car == 'a' || car == 'e' || car == 'i' || car == 'o' || car == 'u') {
                    cont++;
                }
            }
            JOptionPane.showMessageDialog(null, cont);
        }
    }

    Non capisco perchè in tutte e due le righe dove ci sono i // mi dà errore

    Grazie in anticipo
    Ultima modifica di maseeeeeee; 19-10-2014 a 11:28

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da maseeeeeee Visualizza il messaggio
    codice:
                  //if(s.charAt(i)=='a'||'e'||'i'||'o'||'u'){
                 //if(car=='a'||'e'||'i'||'o'||'u'){
    Non capisco perchè in tutte e due le righe dove ci sono i // mi dà errore
    Perché di nuovo non stai considerando la precedenza (priorità) degli operatori (vedi sempre tabella in Operators). Il == ha precedenza maggiore rispetto a ||. Quindi il compilatore prima tratterebbe s.charAt(i)=='a' che dà un boolean poi farebbe risultatoBoolean || 'e' che però non ha senso (gli operandi di || devono essere entrambi boolean).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Perché di nuovo non stai considerando la precedenza (priorità) degli operatori (vedi sempre tabella in Operators). Il == ha precedenza maggiore rispetto a ||. Quindi il compilatore prima tratterebbe s.charAt(i)=='a' che dà un boolean poi farebbe risultatoBoolean || 'e' che però non ha senso (gli operandi di || devono essere entrambi boolean).

    ok stavolta non capisco però....ci arriverò è un pò diverso dal c

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da maseeeeeee Visualizza il messaggio
    ok stavolta non capisco però....ci arriverò è un pò diverso dal c
    if (car=='a'||'e'||'i'||'o'||'u')

    non ha senso né in "C" né in Java (e nemmeno in altri linguaggi, direi) perché (secondo la tua intenzione) esprimerebbe un confronto "multiplo" tra 1 valore e N altri valori. Che non si può fare con un solo operatore di uguaglianza ==.
    In Java l'espressione non compila nemmeno, per le regole che ho riportato prima. In C/C++ compila (il concetto di booleano è più ampio) ma il risultato non è certo quello voluto. E, ripeto, non ha appunto senso.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Quote Originariamente inviata da andbin Visualizza il messaggio
    if (car=='a'||'e'||'i'||'o'||'u')

    non ha senso né in "C" né in Java (e nemmeno in altri linguaggi, direi) perché (secondo la tua intenzione) esprimerebbe un confronto "multiplo" tra 1 valore e N altri valori. Che non si può fare con un solo operatore di uguaglianza ==.
    In Java l'espressione non compila nemmeno, per le regole che ho riportato prima. In C/C++ compila (il concetto di booleano è più ampio) ma il risultato non è certo quello voluto. E, ripeto, non ha appunto senso.


    Hai ragione forse mi sto confondendo uso switch e passa la paura...ho si risolve in parentesi??

    grazie

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da maseeeeeee Visualizza il messaggio
    Hai ragione forse mi sto confondendo uso switch e passa la paura...
    Questi:

    codice:
    // 1)
    if (car == 'a' || car == 'e' || car == 'i' || car == 'o' || car == 'u') {
        //...
    }
    
    // 2)
    if ("aeiou".indexOf(car) != -1) {
        //...
    }
    
    // 3)
    switch (car) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            //...
            break;
    }

    Sono tutti funzionalmente equivalenti, cioè danno lo stesso risultato.


    Quote Originariamente inviata da maseeeeeee Visualizza il messaggio
    si risolve in parentesi??
    No. L'espressione car=='a'||'e'||'i'||'o'||'u' non ha proprio senso, presupporrebbe una visione ben diversa cioè che con 1 solo == sia possibile confrontare car con N altri valori. Non funziona così. Non in C/C++, non in Java e credo in nessun altro linguaggio. Quindi non risolveresti mettendo qualche parentesi in più.
    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.