这个是什么问题的报错(语言-java)

![img](https://img-mid.csdnimg.cn/release/static/image/mid/ask/773214037186162.png "#left"
语句编译器没有报错。是哪里的问题

运行时异常,数组越界访问了

43行的这一代码,肯定会数组越界的

arr[arr.length] = bluenumber;  // 数组长度为 arr.length, 数组的索引范围 为 0 ~ arr.length - 1

对,发代码看看

import java.util.Random;
import java.util.Scanner;

public class test13 {
    public static void main(String[] args) {
        //1.生成中奖号码
        int[]arr = creatNumeber();
       //2.用户输入中奖号码
        int[] userinputArr = userInoutNumber();
        for (int i = 0; i < userinputArr.length; i++) {
            System.out.println(userinputArr);
        }
    }
 public  static int []userInoutNumber(){
     //1.创建数组用于添加用户购买的彩票号码
     //6红,1蓝,数组长度7
     int [] arr =new int[7];
     // 创建键盘录入用于输入
     Scanner sc = new Scanner(System.in);
     //记录用户输入红球号
     for (int i = 0; i < 6; ) {
         System.out.println("请输入第"+(i+1) +"个红球");
         int rednumber = sc.nextInt();
         if (rednumber>= 1&&rednumber<=33) {
            boolean flag = contains(arr,rednumber);
            if (!flag){
                    //不存在,有效的,可以添加
                arr[i] = rednumber;
                i++;
            }else {
                //存在
                System.out.println("当前号码已经存在,重新输入");
            }
         }else {
             System.out.println("当前红球超出范围");
         }
         }
     //用户输入蓝球
     System.out.println("请输入蓝球号码");
     while (true) {
         int bluenumber = sc.nextInt();
         if (bluenumber>=1&&bluenumber<=16){
             arr[arr.length] = bluenumber;
             break;
         }else {
             System.out.println("当前号码超出范围");
         }
     }
          return  arr;
 }
    public static int[] creatNumeber() {
        //1,创建数组用于添加中奖号码
        //6红,1蓝,数组长度7
        int [] arr =new int[7];
        //2.随机生成号码并添加到数组里
        //红:不能重复的1 2 3 4 5 6
        //蓝:可以和红球重复
        //生成红球并添加到数组里
        Random r =new Random();
        for (int i = 0; i < 6; ) {
          int rednumber = r.nextInt(33)+1;
          boolean flag = contains(arr,rednumber);
          if (!flag){
              //把红球添加到数组中
              arr[i]=rednumber;
              i++;
          }
        }
       int blueNumber =  r.nextInt(16)+1;
        arr[arr.length-1]=blueNumber;
        return arr;
    }
    public static  boolean contains(int []arr,int number){
        for (int i = 0; i < arr.length; i++) {
            if (arr[i]==number){
                return true;
            }

        }
        return  false;
    }
}
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7601606
  • 除此之外, 这篇博客: java 系统的一些基础知识中的 2.8 编译后生成的img 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 在编译android 之后,会生成几个image 文件, 这些文件是:

    1.、ramdisk.img : 一个分区镜像文件,它会在kernel 启动的时候,以只读的方式被 mount , 这个文件中只是包含了 /init 以及一些配置文件,这个ramdisk 被用来调用init,以及把真正的root file system mount 起来。

    2、system.img:是包含了整个系统,android 的framework,application 等等,会被挂接到 “/” 上,包含了系统中所有的二进制文件

    3、userdata.img: 将会被挂接到 /data 下,包含了所有应用相关的配置文件,以及用户相关的数据。

    4、boot.img: 包括 boot header,kernel, ramdisk boot镜像不是普通意义上的文件系统,而是一种特殊Android定制格式,由文件头信息boot header,压缩的内核,文件系统数据ramdisk以及second stage loader(可选)组成,它们之间非页面对齐部分用0填充。

    5、update.img: 将所有的img文件,通过指定打包工具,制作update.img,批量生产中常用到此镜像文件

    1、 Android系统的移植过程与移植linux很像 先移植bootloader,再移植linux内核,最后烧写文件系统,只是最后烧写文件系统的时候用system.img就行了。 流程: bootloader.img -> boot.img -> system.img (将android 系统烧录到手机硬件上,进行合适的文件分区)

    img格式文件是镜像文件的一种。linux(android)系统加电后进入bios,随后读取硬盘的主引导记录(MBR)(bootloader),然后调用另一个引导程序(grub或lilo)(boot)来加载内核和镜像文件。加载内核后系统会把文件系统存放到ram中,然后系统运行。

    JAR文件是Java Archive File-java档案文件的简称,是与平台无关的文件格式,基于zip文件格式将许多文件合成一个压缩文件.jar,区别是比zip多了一个包含了一个 META-INF/MANIFEST.MF 文件,这个文件是在生成 JAR 文件的时候自动创建的。

    3.作用

    JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。