Java 在输入 'done' 时终止数组



update!现在,我已经解决了原始问题,尽管结果我有一个错误显示最小和最古老的成员并丢下以下错误。有什么建议么?谢谢

线程中的异常" main" java.lang.indexoutofboundsexception:index:4,大小:4 在java.util.arraylist.rangecheck(arraylist.java:653) 在java.util.arraylist.get(arraylist.java:429) 在nameage.main(nameage.java:46)

import java.util.Scanner;
import java.util.ArrayList;
public class NameAge {
    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    final int MAX_VALUE = 4;
    ArrayList<String> nameList = new ArrayList<String>();
    ArrayList<Integer> ageList = new ArrayList<Integer>();
    Integer[] ages = new Integer[10];
    for (int i = 0; i < MAX_VALUE; i++) {
        System.out.print("Enter a name: ");
        String currentLine = input.next();
        if (currentLine.equals("DONE")) {
        break;
        }
        nameList.add(currentLine);
        System.out.print("Now enter an age for " + currentLine + ": ");
        ageList.add(input.nextInt());
      }
        System.out.print("n");
        for(int i = 0; i < MAX_VALUE; i++) {
            System.out.println("Name: " + nameList.get(i) + "   Age: " + ageList.get(i));

        }
        // DISPLAY YOUNGEST AND OLDEST OF ARRAY, PRODUCING ERRORS
        int smallest = ageList.get(0);
        int largest = ageList.get(0);
        String oldest = nameList.get(0);
        String youngest = nameList.get(0);
        for (int i = 0; i < ages.length; i++) {
            if(ageList.get(i) > largest) {
                largest = ageList.get(i);
                oldest = nameList.get(i);
            }
             else if(ageList.get(i) < smallest) {
                smallest = ageList.get(i);
                youngest = nameList.get(i);
            }
        }
            System.out.println("nThe youngest person is " + youngest + " who is " + smallest + " years old");
            System.out.println("The oldest person is " + oldest + " who is " + largest + " years old");
        }
    }

正如评论所暗示的那样,我将在这里使用两个正则表达式,一个是该名称,一个是年龄的。另外,我将扫描仪的输入作为字符串。当前,您正在调用Scanner.nextInt(),我相信对于非数字数据将失败。如果发生这种情况,您的普通应用程序逻辑以检查输入甚至永远不会受到打击。而是将两者都读为字符串,然后使用正则验证输入的格式。

类似的东西应该有效:

String age = "35";
String name = "Tim Biegeleisen";
if (name.matches(".*[^a-zA-Z].*")) {
    System.out.println("Not a valid name");
}
if (age.matches(".*[^0-9].*")) {
    System.out.println("Not a valid age");
}

正则指出是完成验证的最简单方法。您可能还想查看java.util.regex.Pattern的Javadoc(https://docs.oracle.com/javase/8/docs/api/java/java/util/regex/regex/pattern.html)。

name.matches("\D+") // for anything other than numbers with length > 1
name.matches("\d+") // for numbers of length 1 and more

最新更新