黑马程序员技术交流社区

标题: 打印车牌有时候显示索引越界怎么回事 [打印本页]

作者: 奋斗41280    时间: 2016-9-10 23:20
标题: 打印车牌有时候显示索引越界怎么回事
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

/*
* *    模拟生成车牌号的程序.程序运行.生成十个随机的车牌子.打印在控制台.
*  举例: 京C.85100 / 津K.45H88  
*  要求:1.车牌子为京字或津字开头,后面字母为 C E F H J K中随机.
*      2.号码为五位.数字和大写字母随机.(数字为0-9, 字母为A65-G71)
*      3.定义生成号码的方法.返回车牌号字符串.
*      4.循环调用10次生成号牌方法,生成5块津牌,5块京牌,并全部打印在控制台s
*/
public class CarBtand {
    // 定义数组1存储 京 津
    // 定义数组2存储 c e f h j k
    // 定义集合 存储 0-9 a-g
    public static void main(String[] args) {
        String[] arr1 = { "京", "津" };
        char[] arr2 = { 'A', 'B', 'C', 'D', 'E', 'F', 'G' };
        ArrayList<Integer> list = new ArrayList<>();
        addList(list);

        

        // 输入车牌地址 1=京 2=津
        int a = new Scanner(System.in).nextInt();
        int y = 0;
        // 生成车牌的次数
        int x = new Scanner(System.in).nextInt();
        

        while (y < x) {
            int b = new Random().nextInt(arr2.length);

            String i = "";
            if (a == 1) {
                i = arr1[0];

            }
            if (a == 2) {
                i = arr1[1];
            }

            System.out.print(i + arr2[b]);

            
            // 索引所存数组
            int[] arr = arrRan();
            for (int j = 0; j < arr.length; j++) {
                if ((list.get(arr[j])) > 64) {
                    int l = list.get(arr[j]);
                    char p = (char) l;
                    System.out.print(p);
                } else {
                    System.out.print(list.get(arr[j]));
                }

            }
            System.out.println();
            y++;
        }
    }

    // 索引值
    private static int[] arrRan() {
        int[] arr = new int[5];
        for (int i = 0; i < arr.length; i++) {
            int x = new Random().nextInt(18);// 0-17
            arr[i] = x;
        }
        return arr;

    }

    // 生成数组录入
    public static void addList(ArrayList<Integer> list) {
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        for (int i = 65; i < 72; i++) {
            list.add(i);
        }
    }

}
======================================
异常:  有时候没问题,有时候打印的时候会出现这样的说索引越界了,下面的我打印几次中有的正常有的显示如下,找了半天没找见,求大牛,另外这个题没做完,我回头还要做,希望大牛能帮我指出是哪里错了,然后我再做下面的.
1
10
Exception in thread "main" 京Djava.lang.IndexOutOfBoundsException: Index: 17, Size: 17
    at java.util.ArrayList.rangeCheck(ArrayList.java:635)
    at java.util.ArrayList.get(ArrayList.java:411)
    at TextPritise.CarBtand.main(CarBtand.java:53)
0GFFA
京CGDE02
京GFEF55
京D






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2