Visualizzazione dei risultati da 1 a 7 su 7

Discussione: stringhe e percentuali

  1. #1

    stringhe e percentuali

    Ciao raga, vorrei un aiuto su come risolvere questo problema: data in input (da console) una frase, visualizzare la percentuale delle vocali, delle consonanti e degli spazi inseriti. Ho provato a fare così e poi mi sono bloccato ma non so se è giusto mi potete dire cosa fare? Grazie in anticipo.
    codice:
    package frase;
    import java.util.Scanner;
    public class frase {
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      @SuppressWarnings("resource")
      Scanner in=new Scanner(System.in);
      String frase=new String();
      System.out.println("Inserisci una frase");
      frase=in.nextLine();
      int contspazi=0,contvocali=0,contconsonanti=0;
      for(int i=0; i<frase.length();i++)
      {
       frase.charAt(i);
       if (i== ' ')
       {
        contspazi++;
       }
       if(i== 'a'||'b')
       {
        
       }
      }
     }
    }

  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
    if(i== 'a'||'b')
    Così no, non ha senso. Il linguaggio non funziona così! Devi usare l'operatore == per ciascun test per un certo carattere e mettere in "or" le condizioni.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Così dovrebbe essere più corretto, ora come calcolo la percentuale?
    codice:
    package frase;
    import java.util.Scanner;
    public class frase {
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      @SuppressWarnings("resource")
      Scanner in=new Scanner(System.in);
      String frase=new String();
      System.out.println("Inserisci una frase");
      frase=in.nextLine();
      int contspazi=0,contvocali=0,contconsonanti=0;
      for(int i=0; i<frase.length();i++)
      {
       frase.charAt(i);
       if (i== ' ')
       {
        contspazi++;
       }
       if((i=='a') || (i=='e') || (i=='i') || (i=='o') || (i=='u'))
       {
        contvocali++;
       }
       if((i=='b') || (i=='c') || (i=='d') || (i=='f') || (i=='g') || (i=='h') || (i=='l') || (i=='m') || (i=='n') || (i=='p') || (i=='q') || (i=='r') || (i=='s') || (i=='t') || (i=='v') || (i=='z'))
       {
        contconsonanti++;
       }
      }
     }
    }

  4. #4
    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
    Così dovrebbe essere più corretto
    No, innanzitutto stai testando 'i', che è solo l'indice. Devi prendere e usare il valore fornito da charAt!
    Esiste comunque un approccio furbo e pratico: usare indexOf su un String che contiene le lettere da testare.

    Quote Originariamente inviata da Saverioapple Visualizza il messaggio
    ora come calcolo la percentuale?
    Per ciascun contatore: contatore / somma_contatori

    moltiplicato per 100 ovviamente per avere la percentuale. Ah, importante: la divisione deve essere "floating-point". Se fai un int diviso un int la divisione è "intera", senza decimali. Converti uno dei due operandi a double.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Grazie per la risposta, alla fine quello corretto è così?

    codice:
    package frase;
    import java.util.Scanner;
    public class frase {
     public static void main(String[] args) {
      // TODO Auto-generated method stub
      @SuppressWarnings("resource")
      Scanner in=new Scanner(System.in);
      String frase=new String();
      System.out.println("Inserisci una frase");
      frase=in.nextLine();
      double percspazi,percvocali,perconsonanti,contspazi=0,contvocali=0,contconsonanti=0;
      int p;
      for(int i=0; i<frase.length();i++)
      {   
       p=frase.charAt(i);
       if (p== ' ')
       {
        contspazi++;
       }
       if((p=='a') || (p=='e') || (p=='i') || (p=='o') || (p=='u'))
       {
        contvocali++;
       }
       if((p=='b') || (p=='c') || (p=='d') || (p=='f') || (p=='g') || (p=='h') || (p=='j') || (p=='k') || (p=='l') || (p=='m') || (p=='n') || (p=='p') || (p=='q') || (p=='r') || (p=='s') || (p=='t') || (p=='v') || (p=='w') || (p=='x') || (p=='y') || (p=='z'))
       {
        contconsonanti++;
       }
      }
      percspazi=contspazi/(contspazi+contvocali+contconsonanti)*100;
      percvocali=contvocali/(contspazi+contvocali+contconsonanti)*100;
      perconsonanti=contconsonanti/(contspazi+contvocali+contconsonanti)*100;
      System.out.println("Percentuale spazi->"+percspazi);
      System.out.println("Percentuale vocali->"+percvocali);
      System.out.println("Percentuale consonanti->"+perconsonanti);
     }
    }

  6. #6
    Utente di HTML.it L'avatar di minomic
    Registrato dal
    Nov 2010
    Messaggi
    635
    La riga if con tutte le consonanti è inutile se puoi fare la seguente assunzione sulle tue stringhe: se non è uno spazio e non è una vocale, allora è una consonante. Quindi se sei sicuro che non ci siano numeri, punteggiatura, simboli, ecc. allora ti basta un else. Altrimenti può andare bene così. Magari valuta la possibilità di creare un paio di funzioni isVocale(char c) e isConsonante(char c) per alleggerire il main, ma questa è più che altro una questione di stile.


  7. #7
    Grazie per la risposta, funziona tutto correttamente

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.