Java 使用来自用户的数据逐渐填充数组

Java 使用来自用户的数据逐渐填充数组,java,arrays,conditional,fill,java.util.scanner,Java,Arrays,Conditional,Fill,Java.util.scanner,我试图用用户输入的单词填充数组。每个单词必须比前一个单词长一个字母,比下一个单词短一个字母。它们的长度等于表行索引,从2开始计算。文字最终会形成一个单面金字塔,如: A AB ABC ABCD Scanner sc=新扫描仪(System.in); System.out.println(“给出数组的高度:”); 高度=sc.nextInt(); 字符串[]字=新字符串[高度]; 对于(int i=2;ii-2 | |字[i-2]。长度() 您没有从Scanner读取height(值是多少?) 您

我试图用用户输入的单词填充数组。每个单词必须比前一个单词长一个字母,比下一个单词短一个字母。它们的长度等于表行索引,从2开始计算。文字最终会形成一个单面金字塔,如:
A
AB
ABC
ABCD

Scanner sc=新扫描仪(System.in);
System.out.println(“给出数组的高度:”);
高度=sc.nextInt();
字符串[]字=新字符串[高度];
对于(int i=2;ii-2 | |字[i-2]。长度()
  • 您没有从
    Scanner
    读取
    height
    (值是多少?)
  • 您确定不允许使用
    列表
    和其他可动态增长的数据结构吗
  • 如果不满足长度要求,该怎么办
  • 为什么
    2
    -2
    偏移?
    • i=2
      时,您还可以访问
      words[i-3]
      。这将抛出
      ArrayIndexOutOfBoundsException

  • 这里有一个改写,使逻辑更加清晰:

        Scanner sc = new Scanner(System.in);
    
        System.out.println("Height?");
        while (!sc.hasNextInt()) {
            System.out.println("int, please!");
            sc.next();
        }
        final int N = sc.nextInt();
    
        String[] arr = new String[N];
        for (int L = 1; L <= N; L++) {
            String s;
            do {
                System.out.println("Length " + L + ", please!");
                s = sc.next();
            } while (s.length() != L);
            arr[L - 1] = s;
        }
    
        for (String s : arr) {
            System.out.println(s);
        }
    
    Scanner sc=新扫描仪(System.in);
    System.out.println(“高度?”);
    而(!sc.hasnetint()){
    System.out.println(“int,请!”);
    sc.next();
    }
    最终整数N=sc.nextInt();
    字符串[]arr=新字符串[N];
    
    对于(int L=1;L奇怪的任意要求,8个重复,笨拙的编码风格,没有真正的问题?当然,家庭作业.Aigh.Scanner不应该这样做。(是吗?)数据应该一直读取直到要求被满足。我可以使用列表,但我仍然必须限制每个输入的单词。@neville:你可以使用
    next()
    添加到一个临时变量,并检查它是否满足条件,如果不满足条件,请再次询问。查看我的答案,尤其是
    执行while
        Scanner sc = new Scanner(System.in);
    
        System.out.println("Height?");
        while (!sc.hasNextInt()) {
            System.out.println("int, please!");
            sc.next();
        }
        final int N = sc.nextInt();
    
        String[] arr = new String[N];
        for (int L = 1; L <= N; L++) {
            String s;
            do {
                System.out.println("Length " + L + ", please!");
                s = sc.next();
            } while (s.length() != L);
            arr[L - 1] = s;
        }
    
        for (String s : arr) {
            System.out.println(s);
        }