【问题标题】:Java using two loopsJava 使用两个循环
【发布时间】:2012-10-22 06:56:06
【问题描述】:

我的教授要求我们生成这个输出:

A1 B2 C3 D4 E5

F6 G7 H8 I9 J10

K11 L12 M13 N14 O15

P16 Q17 R18 S19 T20

U21 V22 W23 X24 Y25

Z26

我得到了正确的输出,但他不接受我的代码;他说我必须在不使用数组且仅使用 2 个循环的情况下做到这一点。我想不出任何可以产生相同输出的解决方案。我想知道是否可以只用 2 个循环产生相同的输出?我的代码是这样写的,但我的教授说我必须修改它。

public class lettersAndNumbers {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        String[] abc = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
                "S", "T", "U", "V", "W", "X", "Y", "Z", };

        int i = 0;
        while ( i < abc.length ) {

            int j = 1;
            while ( j <= 26 ) {

                int k = 1;
                while ( k <= 5 ) {

                    System.out.print(abc[i] + j + "\t");
                    j++;
                    i++;
                        k++;

                    if ( k == 6 ) {
                        System.out.println();
                    }

                }
                k = 1;
            }
        }
    }

}

【问题讨论】:

  • 我想你的教授会很高兴知道你是自己做的。
  • +1 感谢您自己尝试,而不仅仅是要求我们为您做这一切!
  • 两个循环?如果您了解模数运算符,则可以在一个循环中执行此操作...
  • 您可以使用 println() 在零循环中执行此操作。你应该请教授澄清要求是什么。

标签: java loops


【解决方案1】:

我的 Java 真的很生锈,但我认为这就是你要找的:

for(int i = 0; i < 26; i++) {
  System.out.printf("%c%d ", 'A' + i, i + 1);

  if (i % 5 == 0) {
    System.out.println();
  }
}

【讨论】:

    【解决方案2】:

    应该这样做:

    String[] abc = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R",
                "S", "T", "U", "V", "W", "X", "Y", "Z", };
    
    for(int i=0; i<abc.length; i++){
     System.out.println(abc[i] + (i+1) + "\t");
     if( i % 5 == 0 ){
      System.out.println();
     }
    }
    

    【讨论】:

      【解决方案3】:

      您实际上可以在字符上循环,这将使您的代码更具可读性并避免为您的字母使用数组:

      int count = 1;
      for (char letter = 'A'; letter <= 'Z';) {
          for (int i = 1; i <= 5; ++i, ++letter, ++count) {
              System.out.print(letter);
              System.out.print(count + "\t");
              if (letter == 'Z')
                  return;
          }
          System.out.println();
      }
      

      【讨论】:

      • 为什么i &lt;= 5是循环中的条件?我不明白:\
      • @JaGb 首先清除您的循环概念。看来你从来没有使用过 for 循环。
      【解决方案4】:

      在一个循环中做有什么问题吗?

      public class AlphaOneLoop {
      public static void main(String[] args) {
          for (int i = 65; i <= 90; i++) {
              System.out.print(new String(Character.toChars(i)) + (i - 65 + 1) + " ");
      
          }
      }
      

      }

      【讨论】:

      • 如果你使用模运算符实现它,你会在每五次打印后忘记换行:p +1。
      【解决方案5】:

      这是一种在一个 for 循环中执行此操作的方法:

      // 'A' starts at 65
      int ascii_offset = 65;
      
      // Loop 26 times and print the alphabet
      for (int index = 1; index <= 26; index++) {
      
          // Convert an ascii number to a char
          char c = (char) (ascii_offset + index - 1);
      
          // Print the char, the index, then a space
          System.out.print("" + c + (index) + " ");
      
          // After 5 sets of these, print a newline
          if (index % 5 == 0) {
              System.out.println("\n");
          }
      }
      

      要进一步了解 ascii 和 int 到 char 的转换,这里有一个相关的讨论:Converting stream of int's to char's in java

      【讨论】:

        【解决方案6】:

        好吧,别难过。我会做你一开始做的同样的事情。但是,您可以只使用两个循环而不使用数组来执行此操作。

        让一个循环简单地从 1 迭代到 26。然后让另一个循环从大写字母 A 的 ASCII 值 (65) 迭代到大写字母 Z 的 ASCII 值 (90)。您现在需要做的就是将 ASCII 值转换为字符串,然后进行连接。

        http://www.asciitable.com/

        【讨论】:

          猜你喜欢
          • 2020-10-17
          • 1970-01-01
          • 1970-01-01
          • 2021-04-09
          • 1970-01-01
          • 2015-09-20
          • 2011-01-23
          • 1970-01-01
          • 2019-03-08
          相关资源
          最近更新 更多