程序接受单词作为i / p,检查单词辅音/元音中的每个单个字母。条件如果输入不是字母,则打印错误消息

时间:2018-03-06 07:18:21

标签: java arrays loops character

输出应该只打印一次,但是一旦找到VOWEL就无法弄清楚它是否会脱离循环。

继续提供输入' a'曾经然后在船尾#39;你会知道我真正想要的......

package com.java;

import java.util.Scanner;

public class three {

    @SuppressWarnings("resource")

    public static void main(String args[])
    {

        Scanner s = new Scanner(System.in);
        System.out.println("Enter String");
        String a = s.next();
        char b[] = a.toCharArray();
        ///char c[] = {"a","e","i","o","u"};
        String str = "aeiouAEIOU"; 
        char[] c = str.toCharArray();
        //char[] charArray = str.toCharArray();


        if(a.matches(".*\\d+.*"))
        {
            System.out.println("WARNING!!!");
            System.out.println("please input only string");
        }
        else
        {
            for(int i=0;i<b.length;i++)
            {
                for(int j=0;j<c.length;j++)
                {
                    if(b[i]==c[j])
                        {
                                System.out.print(" VOWEL ");
                        }
                    else if(b[i]!=c[i])
                        {
                            System.out.print(" consonant ");
                        }
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

问题

问题在于你的第二个for循环,你不应该从它内部打印元音或辅音。这个内部循环就是决定字符是否是元音,所以你应该在这个循环中更新一个布尔值,并根据布尔值的值在外部循环中打印出来。

代码更正

这是你的代码更正(我更改了变量名称,因此更容易理解):

public static void main(String args[]) {
  String vowels = "aeiouAEIOU";
  char[] vowelsArray = vowels.toCharArray();

  Scanner s = new Scanner(System.in);
  System.out.println("Enter String");
  String inputString = s.next();
  char inputStringArray[] = inputString.toCharArray();

  if(inputString.matches(".*\\d+.*")) {
    System.out.println("WARNING!!!");
    System.out.println("please input only string");
  } else {
    for(int i=0;i<inputStringArray.length;i++) {
      // Declare a boolean to say if the character is a Vowel or not
      boolean isVowel = false;
      // Check the character and set the boolean value
      for(int j=0;j<vowelsArray.length;j++) {
        if(inputStringArray[i]==vowelsArray[j]) {
          isVowel = true;
          break;
        }
      }
      // Then do the printing here, in the input characters loop
      if(isVowel) {
        System.out.print(" VOWEL ");
      } else if(inputStringArray[i]!=vowelsArray[i]) {
        System.out.print(" consonant ");
      }
    }
  }

有关正则表达式的说明

如果您只想接受来信,可能更喜欢这个正则表达式。

if(!inputString.matches("[a-zA-Z]+"))

您当前的正则表达式会接受hey!

另一种编码方式

这是另一种方法:

  • 使用contains对象的List方法。
  • 将正则表达式测试修改为仅接受字母
  • 对输入字符串进行下限,以便我们的元音数组只能是小写

请参阅内联注释以获取解释:

public static void main(String args[]) {

  // declare your vowels
  List<Character> vowelsList = Arrays.asList('a', 'e', 'i', 'o', 'u', 'y');

  // get the input string
  Scanner s = new Scanner(System.in);
  System.out.println("Enter String");
  String inputString = s.next();

  if(!inputString.matches("[a-zA-Z]+")) {
    System.out.println("WARNING!!!");
    System.out.println("please input only string");

  } else {
    // Transform your inputString to lower case 
    // (because we only have lower case in our vowels list)
    String lowerCaseInputString = inputString.toLowerCase();

    // Then for each character of the input string, 
    // check if it is in the vowels list or not
    for(char c : lowerCaseInputString.toCharArray()) {
      if(vowelsList.contains(c)) {
        System.out.print(" VOWEL ");
      } else {
        System.out.print(" consonant ");
      }
    }
  }
}

最后,一个lambda版本

如果您使用Java 8且愿意使用lambda,则可以用lambda替换整个else

...
} else {
  inputString.toLowerCase().chars()
      .mapToObj(c -> vowelsList.contains((char) c) ? " VOWEL " : " consonant ")
      .forEach(System.out::print);
}
...