2016-09-26 3 views
0

Ich versuche, ein einfaches Programm zu schreiben, das die Anzahl der Vokale, Konsonanten und Leerzeichen in einer Zeichenfolge zählt, die Benutzer eingegeben wird. Ich habe ein Problem mit meinen Anweisungen while loop und if. Es zählt alles als Raum statt als Vokal oder Konsonant. Bitte lassen Sie mich wissen, wenn Sie irgendwelche Vorschläge haben! :)String zu Char Problem

import java.util.Arrays; 
import java.util.HashSet; 
import java.util.Set; 
import javax.swing.JOptionPane; 

public class VowelCounter { 

private static final Set<String> 
     vowels = new HashSet<> 
     (Arrays.asList("a","e","i","o","u","y")); 

private static final Set<String> 
     cons = new HashSet<> 
     (Arrays.asList("b","c","d","f","g","h","j","k","l","m","n","p","q","r","s","t","v","w","x","z")); 

public static void main(String[] args) { 

    // ---------------------------------------------- VARIABLE DECLARATIONS 
    int vnum = 0; 
    int snum = 0; 
    int cnum = 0; 
    int i = 0; 


    // -------------------------------------------------------------- INPUT 
    String input = JOptionPane.showInputDialog 
     ("Enter name (like your university)"); 
    // --------------------------------------------------------- PROCESSING 
    char result = input.charAt(i); 

    do{ 
     if (vowels.contains(result)) 
      vnum++; 

     if (cons.contains(result)) 
      cnum++; 

     if (!input.matches(("[a-zA-Z]+"))) 
      snum++; 


     i++; 
    }while (i < input.length()); 

    System.out.println("There are " + vnum + " vowels, " + cnum + " consonants, and " + snum + "spaces"); 
+0

ich mit ihm nicht allzu vertraut bin, aber Ihr 'regex' muss falsch sein. Warum nicht einfach 'if (input.equals (" "))' –

+0

Sie verwenden nur das erste Zeichen der Zeichenkette: move 'char result = input.charAt (i);' innerhalb des Zyklus. –

+0

Ihr Test für "Nicht-Buchstaben" ist falsch: Es wird auf den gesamten Eingang angewendet und da es "+" ist, wird es so viele wie möglich essen. –

Antwort

1
  1. Du wirst keine char in einem Set<String> zu finden.

  2. In Ihrer Schleife erhöhen Sie i, aber nicht das entsprechende Zeichen.

  3. Sie sind unnötig (und falsch) mit Regex, wo eine einfache else wird ausreichen.

Versuchen Sie folgendes:

private static final Set<Character> 
     vowels = new HashSet<> 
     (Arrays.asList('a','e','i','o','u','y')); 

private static final Set<Character> 
     cons = new HashSet<> 
     (Arrays.asList('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','z')); 

... 

    for (int i = 0; i < input.length(); i++) { 
     Character result = input.charAt(i); 
     if (vowels.contains(result)) 
      vnum++; 
     else if (cons.contains(result)) 
      cnum++; 
     else 
      snum++; 
    } 
+0

Das ist der eine. Ich werde meine Kommentare zurücknehmen. –

0

Ihre Schleife ändert nie result, so ist es immer die erste Zeicheneingabe.