【问题标题】:Printing symbols from an array of chars从字符数组打印符号
【发布时间】:2012-04-02 23:49:18
【问题描述】:

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

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

我必须:

  1. 仅打印元音;
  2. 只打印辅音;
  3. 打印数字和;
  4. 打印其他符号。

我在 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]); 
}
 }
    }

关于如何打印符号有什么建议吗? 谢谢。

【问题讨论】:

  • 当您尝试打印符号时实际发生了什么?
  • 为什么您的符号数组包含字母而不包含符号?
  • 为什么使用char 而不是int 作为数组索引? char [] lista = 应该是 char [] lista = ...。而且您对内部 for 循环的缩进具有误导性...
  • @CarlNorum 我不知道所有的符号。我想我可以将我的“符号”数组与“列表”匹配,然后检查“符号”数组中缺少的内容。我应该将数组称为“noSymbols”。
  • @Lion ...每个字符都会打印几次“列表”数组。

标签: java arrays char


【解决方案1】:

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

不是

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

但是

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

换句话说,您应该在lista[j] 等于symbols[z] 时立即中断z 上的内部循环,并且只有在symbols 中找不到匹配项时才打印它是一个符号。

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

【讨论】:

    【解决方案2】:

    如果您所说的“符号”是指“不是数字或字母”:您可以检查一个字符是否不是数字或字母 - 如果都不是,则打印它。

    在迭代lettersnumbers 时有一个boolean flag [初始化为true],如果您找到其中一个匹配项,请将其设置为false

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

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

    【讨论】:

    • 还建议使用java.lang.Character。有isLetterisDigit等有用的便捷方法。
    【解决方案3】:

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

    例如:

      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 数组中。

    【讨论】:

      【解决方案4】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-15
        • 1970-01-01
        • 2021-07-24
        • 2021-04-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多