带有“线程异常”的Java错误

时间:2016-04-05 10:40:01

标签: java

嘿伙计我正在制作一个程序,它会反转用户的输入。 目前我的代码是

import java.util.*;

public class Reverse {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        List<String> input = new ArrayList<>();
        while (in.hasNextLine())
            input.add(in.nextLine());
        for (int x = 0; input.size() >= x; x++) {
            String reverse = "";
            for (int z = input.get(x).length(); z > 0; z--) {
                reverse += input.get(x).charAt(z - 1);
            }

            System.out.println(reverse);
        }
    }
}

但我收到错误的地方

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at Reverse.main(Reverse.java:12)*

非常感谢任何帮助,谢谢!

4 个答案:

答案 0 :(得分:2)

更改for循环的范围:

for (int x=0; x < input.size(); x++) {
    String reverse = "";
    for (int z=input.get(x).length(); z > 0; z--) {
        reverse += input.get(x).charAt(z - 1);
    }

    System.out.println(reverse);
}

访问List从零开始,因此在外部循环中,对于大小为3的列表,x索引所需的最大值为2。

答案 1 :(得分:0)

在最后一个iteraton上,“x”等于input.size(),因此元素input.get(x)将不存在,在第二个“for”循环中。

答案 2 :(得分:0)

input.size() >= x

在最后一次迭代中,x等于列表的大小。由于列表索引从0开始,这是一个无效的索引。

在Java中按索引循环的惯用方法是

for (int x = 0; x < size; x++)

你应该使用这种惯用的方式。

但对于这样一个循环,你不需要索引,你应该使用for-each循环:

for (String s : input) {

这种方式更安全,无论列表类型如何都保证有效,并且更具可读性。

答案 3 :(得分:0)

    package com.stackwork;

    import java.util.*;

    public class Reverse {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            List<String> input = new ArrayList<String>();
            while (in.hasNextLine())
                input.add(in.nextLine());
// prints the size of array
            System.out.println("the array size :" + input.size());
            for (int x = 0; input.size() > x; x++) {
//Prints the incremented x value at each step 
                System.out.println("the x value inside the for loop :" + x);
                String reverse = "";
                for (int z = input.get(x).length(); z > 0; z--) {
//prints the length of each string in the array
                    System.out.println("the value of z is :" + z);
                    reverse += input.get(x).charAt(z - 1);
//prints the value in each step of reverse
                    System.out.println("each step of reverse " + reverse);
                }

                System.out.println(reverse);
            }
        }
    }