【问题标题】:How do I print the alphabet line by line?如何逐行打印字母?
【发布时间】:2020-04-23 15:48:22
【问题描述】:

我是一名帮助年轻学生学习编程的学生。其中一些已获得代码:

public class student {
    public static void main(String[] args) {
        ArrayList<char[]> data1 = new ArrayList<char[]>();
        ArrayList<char[]> data2 = createData();
        displayData(data2);
    }
    
    public static ArrayList<char[]> createData(){
        ArrayList<char[]> res = new ArrayList<char[]>();
        for(int index = 'A'; index<='Z'; index++) {
            char[] temp = new char[1+(index - 'A')];
            for(int count=0;count<temp.length;count++) {
                temp[count] = (char) ('A' + count);
            }
            res.add(temp);
        }
        return res;
    }
    
    public static void displayData(ArrayList<char[]> values) {
        
    }

这意味着打印出如下字母:

一个

AB

ABC

等等。 但是我自己对 displayData() 方法中的内容有疑问。

任何帮助表示赞赏,在此先感谢!

【问题讨论】:

  • 顺便说一句,您可以使用 char[][] 而不是 char 数组的 ArrayList,因为字母表总是 26 个字母。
  • ChrisAmwell - 如果其中一个答案解决了您的问题,您可以通过将其标记为已接受来帮助社区。接受的答案有助于未来的访问者自信地使用该解决方案。查看meta.stackexchange.com/questions/5234/… 了解如何操作。
  • @ChrisAmwell 您能否接受以下答案之一或解释为什么这些答案不起作用?

标签: java arrays alphabetical


【解决方案1】:

你可以做单功能

public static void displayData() {
        int start = 'A';
        int finish = 'Z';
        for (int i = start ; i < finish; i++){
            for (int j = start ; j <= i; j++) {
                System.out.print((char)j);
            }
            System.out.println();
        }
    }

【讨论】:

    【解决方案2】:

    你可以这样写:

    public static void displayData(ArrayList<char[]> values) {
         for(char[] s : values){
            for(char c : s){
                System.out.print(c);
            }
            System.out.println();
        }
    }
    

    这应该会给你想要的结果。

    第一个高级 for 循环遍历 ArrayList 的每个条目。第二个 for 循环遍历 ArrayList 条目之一中的每个条目。

    【讨论】:

      【解决方案3】:

      你可以把问题分成两部分:

      第 1 部分 -。打印一个字母:

      private static void printAlphabet(char[] alphabet) {
      
              for(char c : alphabet) {
                  System.out.print(c);
              }
      
      }
      

      第 2 部分 -。使用最后一种方法,您可以在每次打印字母时打印所有字母,并在末尾添加一个新行:

      public static void displayData(ArrayList<char[]> values) {
      
               for (char[] alphabet: values) {
                   printAlphabet(alphabet);
                   System.out.println();
               }
      
      }
      

      奖励:您可以使用 Stream 和函数式编程:

      public static void displayDataFunctional(ArrayList<char[]> values) {
      
               values.stream().forEach((alphabet) -> printAlphabet(alphabet));
      
      }
      

      建议:按照惯例,Java 类型名称通常以大写字母开头。

      【讨论】:

        【解决方案4】:

        一些可以做到的方式如下:

        1. 通过使用增强的for 循环:
        public static void displayData(ArrayList<char[]> values) {
            for (char[] arr : values) {
                for (char ch : arr) {
                    System.out.print(ch);
                }
                System.out.println();
            }
        }
        
        1. 使用基于索引的for循环:
        public static void displayData(ArrayList<char[]> values) {
            for (int i = 0; i < values.size(); i++) {
                for (int j = 0; j < values.get(i).length; j++) {
                    System.out.print(values.get(i)[j]);
                }
                System.out.println();
            }
        }
        
        1. 通过混合使用增强的for 循环和基于索引的for 循环:
        public static void displayData(ArrayList<char[]> values) {
            for (char[] arr : values) {
                for (int i = 0; i < arr.length; i++) {
                    System.out.print(arr[i]);
                }
                System.out.println();
            }
        }
        

        -或-

        public static void displayData(ArrayList<char[]> values) {
            for (int i = 0; i < values.size(); i++) {
                for (char ch : values.get(i)) {
                    System.out.print(ch);
                }
                System.out.println();
            }
        }
        
        1. 通过使用for 循环和String(char[]) 构造函数:
        public static void displayData(ArrayList<char[]> values) {
            for (char[] arr : values) {
                System.out.println(new String(arr));
            }
        }
        
        1. 使用 Stream API:
        public static void displayData(ArrayList<char[]> values) {
            values.stream().forEach(arr -> System.out.println(new String(arr)));
        }
        

        【讨论】:

          【解决方案5】:

          一点点改进

          使用列表:

          import java.util.ArrayList;
          import java.util.List;
          
          public class Student {
              public static void main(String[] args) {
                  List<String> lines = createList((int) 'A', (int) 'Z');
                  print(lines);
              }
          
              public static List<String> createList(int min, int max) {
                  List<String> lines = new ArrayList<>();
                  for (int i = 0; i <= max - min; i++) {
                      StringBuilder s = new StringBuilder();
                      for (int j = min; j <= min + i; j++) {
                          s.append(Character.toString((char) j));
                      }
                      lines.add(s.toString());
                  }
                  return lines;
              }
          
              public static void print(List<String> lines) {
                  for (String line : lines)
                      System.out.println(line);
              }
          }
          

          工作:https://www.jdoodle.com/embed/v0/21iL

          无列表:

          public class Student {
              public static void main(String[] args) {
                  print((int) 'A', (int) 'Z');
              }
          
              public static void print(int min, int max) {
                  for (int i = 0; i <= max - min; i++) {
                      StringBuilder s = new StringBuilder();
                      for (int j = min; j <= min + i; j++) {
                          s.append(Character.toString((char) j));
                      }
                      System.out.println(s.toString());
                  }
              }
          }
          

          工作:https://www.jdoodle.com/embed/v0/21iP

          使用流:

          import java.util.stream.IntStream;
          import java.util.stream.Stream;
          
          public class Student {
              public static void main(String[] args) {
                  Stream<String> lines = createList((int) 'A', (int) 'Z');
                  lines.forEach(System.out::println);
              }
          
              public static String row(int i, int min, int max) {
                  StringBuilder s = new StringBuilder();
                  IntStream.rangeClosed(min, min + i).forEach(j -> s.append(Character.toString((char) j)));
                  return s.toString();
              }
          
              public static Stream<String> createList(int min, int max) {
                  return IntStream.rangeClosed(0, max - min).mapToObj(i -> row(i, min, max));
              }
          }
          

          【讨论】:

            【解决方案6】:

            一个更短的 lambda

            public void displayData(ArrayList<char[]> values) {
              values.stream().forEach( arr -> System.out.println( arr ) );
            }
            

            【讨论】:

              猜你喜欢
              • 2020-12-12
              • 1970-01-01
              • 2021-04-20
              • 2013-03-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-02-27
              相关资源
              最近更新 更多