当前位置: 首页 > 知识库问答 >
问题:

Java结束数组

云和硕
2023-03-14

更新!现在,我已经修复了原来的问题,但结果是,我在显示最年轻和最老的成员时出错,并抛出以下错误。有什么建议吗?谢谢

线程“main”java中出现异常。lang.IndexOutOfBoundsException:索引:4,大小:4,java。util。ArrayList。java上的rangeCheck(ArrayList.java:653)。util。ArrayList。获取(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");

        }

    }

共有2个答案

丁恩
2023-03-14

正如所指出的,正则表达式是完成验证的最简单方法。您可能还想看看java.util.regex.Pattern(https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html)的javadoc。

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

name.matches("\\d+") // for numbers of length 1 and more
陈宏胜
2023-03-14

正如注释所示,我将在这里使用两个正则表达式,一个表示名称,一个表示年龄。此外,我将从扫描器中获取输入作为字符串。当前,您正在调用扫描仪。nextInt(),我认为对于非数字数据,它会失败。如果发生这种情况,则检查输入的正常应用程序逻辑将永远不会被命中。相反,将两者都作为字符串读取,然后使用regex验证输入的格式。

像这样的方法应该会奏效:

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");
}
 类似资料:
  • 完结 感谢你一路支持,在我开始时完全没有想到这个系列会这么长,会花这么多时间完成,但是创建这个系列的过程使我非常享受,也希望你喜欢它. 既然我已经完成了,我会进一步考虑将其转化为PDF格式.但是,不保证. 最后,我想总结一些帮助你继续学习 Twisted 的建议. 进一步阅读 首先,我建议阅读Twisted的 在线文档. 虽然它备受指责,但我觉得这总比饱受赞誉要好. 如果你希望使用Twisted进

  • 面试官很好只可惜我准备的八股一条都没用上。 因为过度紧张全程语无伦次,回答的时候思路也在乱飞。感觉大寄特寄了

  • 到这里,虽然本书结束了,但对于 Python 的学习和实践还远远没结束,后面我也会持续更新本书。虽然 Python 的语法相比 C++ 等语言比较简洁,但想熟练运用,仍需在实际的项目中多多实践,而不只是停留在简单的概念学习中。 这里主要推荐 Python 相关的一些学习资源,同时也列出本书的主要参考资料。 资源推荐 参考资料

  • 本书介绍了如何基于 Flask 进行 Web 开发,涉及的内容也比较基础,相信读者看完本书后可以做一个简单的 Web 应用。本书的实战例子是一个 Web TODO 应用,由后台进行模板渲染返回给客户端,读者如果有兴趣的话,可以对其进行改编,比如将前端和后端分离,后端负责数据处理,前端负责渲染,如果你对 React 感兴趣的话,可以考虑一下。

  • 您现在拥有开始使用库所需的一切。 从这一点开始,掌握库只是理解如何使用通用概念和随其提供的容器的问题,最好通过查看参考文档来完成。 在某些时候,您可能还想创建自己的概念和数据类型,以更好地满足您的需求; 继续,库被设计为使用那种方式。 Fair warning: functional programming ahead 使用异构对象的编程本质上是功能性的 - 因为不可能修改对象的类型,所以必须引入

  • 这篇教程没有涉及你可能期待的一个较为完整的内容管理系统的所有的事, 但它向你介绍更重要的路由,控制器与模型书写的一般规则. 我们希望这篇教程可以帮助你更深入地了解一些CodeIgniter的基本设计模式,以便于在此基础上做扩展。 既然你已经完成了这篇教程,我们建议您查看其余的文档. CodeIgniter因其全面的文档而常被称赞. 利用这一优势并彻底阅读“介绍”和“常规主题”部分. 当需要时你应该