【问题标题】:Printing Arrays in Java用 Java 打印数组
【发布时间】:2011-03-11 15:19:32
【问题描述】:

这次我想从头到尾打印一个数组。

这是我写的:

public class Arrays {
public static void main (String[] args){
    for (int i = args.length; i >=0; i--){
        System.out.print(args[i]+" ");
    }
}

这是错误信息: 线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:4 在 Assignment02Q04.main(Assignment02Q04.java:5)。

仍然很难实现 Eclipse 错误通知。 我很乐意为您提供帮助。

【问题讨论】:

  • 我只想提一下,我在运行配置选项卡中以这种形式输入数组编号:{1 2 3 4}。
  • 数组是从零开始的 - 你不应该从 args.length - 1 开始吗?如果数组有 4 个条目,则其长度为 4,其元素的索引为 0、1、2 和 3
  • 你试过 args.length -1 吗?数组是基于 0 的,因此 array[1] 是它的第二个元素。如果长度为15,则最后一个元素为array[14]
  • 哇,答案太多了!专家开发人员喜欢您的问题:)
  • @Nir avnon,在 Meta 上看到这个问题:meta.stackexchange.com/questions/2950/…

标签: java arrays


【解决方案1】:

在 java 中,数组以 0 开头。所以一个长度为 5 的数组的元素索引为 0 to 4

以下陈述

for (int i = args.length; i >=0; i--)

来自5 to 0 的循环(对于大小为 5 的数组)

改成

for (int i = args.length-1; i >=0; i--)

还有宾果游戏!

PS:实际上你确实循环到0,所以你可能已经知道数组从0开始。

【讨论】:

    【解决方案2】:

    Java 对数组使用 0 索引,因此您的 args.length 需要考虑到这一点;你应该先从一个开始:

    for (int i = args.length-1; i >=0; i--){
    

    【讨论】:

      【解决方案3】:

      你快到了。您需要以int i = args.length - 1 开头,因为数组的索引是从 0 开始的,并且数组的最后一个元素的长度总是减 1。

      【讨论】:

        【解决方案4】:

        由于您的数组从索引 0 开始,因此最后一个元素位于位置 args.length - 1。 您正在尝试访问 array.length 处的元素,因此是 ArrayIndexOutOfBoundsException

        只需将int i = args.length 更改为int i = args.length - 1

        顺便说一句,那些不是“Eclipse 错误通知”,它们是 Java 异常 :)

        【讨论】:

          【解决方案5】:

          您可以访问直到数组中的(length - 1)

          {a, b, c} 的数组, a 索引为 0,b 为 1,c 为 2。长度为 3,但您无法访问第 3 位的数组。

          【讨论】:

          • 你应该尝试自己做“Tohna 1”硬件。
          • 我试图在没有任何成功的情况下意识到出了什么问题。我自己做,向别人学习没有坏处。
          【解决方案6】:

          数组索引从0开始。所以最后一个索引是length-1。

          如果您有一个包含 5 个元素的数组,那么最后一个的索引为 4。

          你的循环必须是

          for (int i = args.length-1; i >=0; i--){
          

          【讨论】:

            【解决方案7】:

            运行循环(这是 foreach 语法)

            for(String s : args) {
                System.out.print(s + " ");
            }
            

            相反。数组枚举以 0 开始,以array.length - 1 结束。异常还会告诉您引发异常时的元素编号。

            【讨论】:

              【解决方案8】:

              如果你打算这样循环,你必须从 args.length - 1 开始这样想,如果你有一个具有单个元素长度的数组将返回 1,并且唯一可访问的索引将为 0。根据您的代码,您将从索引 1 开始,因此 ArrayIndexOutOfBoundsException。

              【讨论】:

                【解决方案9】:

                关闭!就是这一行:

                for (int i = args.length; i >=0; i--) {
                

                这需要改为:

                for (int i = args.length-1; i >=0; i--) {
                

                为什么? Java(和大多数语言)中的数组从 0 开始,以长度 1 结束。因此,如果您有一个长度为 3 的数组,则有效索引将为 0、1 和 2。长度为 3 的索引将无效并因此导致异常,这就是 Java 所抱怨的。

                【讨论】:

                  【解决方案10】:

                  在java中数组的索引从0开始。 例如 args 包含 4 个元素,它们的索引将为 0,1,2,3,但 agrs.length 为 4。您试图获取元素,它位于数组之外。

                  int i = args.length - 1 // will work
                  

                  【讨论】:

                    【解决方案11】:

                    所有其他答案都是正确的,但这是 Java 中的另一种方法(相同的复杂性顺序)

                        List<String> asList = Arrays.asList(args);
                        Collections.reverse(asList);
                        for (String arg : asList) {
                            System.out.println(arg + " ");
                        }
                    

                    它遍历两次而不是一次,但是如果您需要将数组保持反转以供以后使用,这样会更好

                    【讨论】:

                      【解决方案12】:

                      .length of an array 给出了数组中元素的计数(从 1 开始),但数组索引从 0 开始,因此第一次迭代尝试访问 args[4],而最后一个元素实际上是 args[3],并且数组的大小为 4。

                      将您的代码更改为:

                      for(int i = args.length - 1; i >= 0; i--)
                      

                      你会没事的

                      【讨论】:

                      • 我相信你忘记了 args.length 中的 -1
                      【解决方案13】:

                      你做了无效的 args(args.length),你去了数组中最后一个之后的地方。 an 从 0 开始,一直持续到 length - 1

                      【讨论】:

                        【解决方案14】:

                        你从太高的索引开始:

                        只需将 i = args.length 替换为 i = args.length - 1

                        啊,我记得我的 tohna 1 秒练习 :)

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2015-11-17
                          • 2015-06-20
                          • 2014-05-18
                          • 2016-01-23
                          • 2013-08-21
                          • 1970-01-01
                          相关资源
                          最近更新 更多