从一系列字符中打印符号

时间:2012-03-17 22:02:02

标签: java arrays char

我必须解决一个小问题: 对于给定的字符数组,

char[] lista = {'a', '2', '?', 'd', '!', 'S', '3', 'D', 'k'}; 

我必须:

  1. 仅打印元音;
  2. 只打印辅音;
  3. 打印数字;
  4. 打印其他符号。
  5. 我在4岁时遇到了问题。

    到目前为止我的代码:

    public class Teste {
    
        public static void main(String[] args) {
        char [] lista = {'a', '2', '?', 'd', '!', 'S', '3', 'D', 'k'};
        char [] vogal = {'a', 'e', 'i', 'o','u','A','E','I','O','U'};
        char [] numbers = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '0'};
        char [] leters = {'b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z','B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Y','Z'};
        char [] symbols = {'a', 'e', 'i', 'o','u','A','E','I','O','U','1', '2', '3', '4', '5', '6', '7', '8', '9', '0','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z','B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Y','Z'};
    
        for (char j=0; j<lista.length ; j++)
        for (char i=0; i<vogal.length ; i++ ){
        if ( vogal [i] == lista [j] )
        System.out.println( "the vowels are: " + vogal [i] );
        }
    
        for (char j=0; j<lista.length ; j++)
        for (char x=0; x<numbers.length ; x++ ) {    
        if ( numbers [x] == lista [j] )
            System.out.println( "the numbers are: " + numbers [x] );       
        }
    
        for (char j=0; j<lista.length ; j++)
        for (char y=0; y<leters.length ; y++ ) {    
        if ( leters [y] == lista [j] )
            System.out.println( "the leters are: " + leters [y] );       
        }
            //my main problem is here 
        for (char j=0; j<lista.length ; j++)
        for (char z=0; z<symbols.length ; z++ ){    
        if (symbols [z] != lista [j])
             System.out.println( "the symbols are: " + lista [j]); 
    }
     }
        }
    

    有关如何打印符号的任何建议? 感谢。

4 个答案:

答案 0 :(得分:3)

的倒数
  • 如果参考集中的至少一个(例如符号)匹配
  • 则打印

不是

  • 打印,如果参考集中至少有一个不匹配

  • 如果参考集中的NONE匹配,则打印。

换句话说,只要lista[j]等于symbols[z],就应该在z上打破内循环,只有在symbols找不到匹配项后才打印它是一个符号}。

(我这里没有提供明确的代码,因为这是家庭作业)

答案 1 :(得分:2)

如果用“符号”表示“不是数字或字母”:您可以检查字符是不是数字也不是字母 - 如果它们都不是,则打印出来。

在迭代boolean flagtrue时,letters [初始化为numbers],如果找到匹配项,则将其设置为false其中之一。

如果在迭代结束时仍然是true - 它是一个符号。

我知道这是作业,所以你可能不被允许 - 但如果你可以使用HashSet<Character> - 它可能会简化你的生活。

答案 2 :(得分:1)

您可以简化for循环。您可以使用包含所需字符的字符串,然后检查字符串中是否包含给定字符。您还可以使用Character类来检查char是否表示字母/数字等。

例如:

  public static void main(String[] args) {
      char[] list = {'a', '2', '?', 'd', '!', 'S', '3', 'D', 'k'}; 

      for (char c: list) {
          if (Character.isLetter(c)) {
              System.out.println(c + " is a Letter");

              if ("aeiouAEIOU".contains(String.valueOf(c))) {
                  System.out.println(c  + " is a vowel ");                    
              }
              else {
                  System.out.println(c + " is a consonant");
              }
          }
      }
  }

针对您的具体问题:

for (char j=0; j<lista.length ; j++)
    for (char z=0; z<symbols.length ; z++ ){    
    if (symbols [z] != lista [j])
         System.out.println( "the symbols are: " + lista [j]); 

这里你应该有一个布尔标志来检查no_symbols数组中是否包含该值。

答案 3 :(得分:1)

您可能会发现处理字符串集合更容易。

String list = "a2?d!S3Dk";
String vowel = "aeiouAEIOU";

for(char ch : list.toCharArray()) {
   if (Character.isDigit(ch))
      System.out.print(ch + " is a digit");
   else if (Character.isLetter(ch))
      System.out.print(ch + " is a letter");
   else
      System.out.print(ch + " is a symbol");

   if (vowel.indexOf(ch) >= 0)
      System.out.print(" and a vowel.");
  System.out.println();
}

打印

a is a letter and a vowel.
2 is a digit
? is a symbol
d is a letter
! is a symbol
S is a letter
3 is a digit
D is a letter
k is a letter