输入后,foreach循环错误引发出界异常

时间:2019-03-29 09:00:35

标签: java arrays indexoutofboundsexception

我正在尝试使用for-each循环在初始化数组中接受输入,但是它超出了范围限制

import java.util.Scanner;

class Hello {

 public static void main(String[] args){

     int[] a = new int[9];

     Scanner sc = new Scanner(System.in);

     for(int i:a)
    {
      a[i]=sc.nextInt();
    }
      System.out.println("entered elements:");
      for(int x : a)
    {System.out.println("  "+a[x]);
    }
 }
}

输入后,它会超出范围

4 个答案:

答案 0 :(得分:2)

 for(int i:a)
{
  a[i]=sc.nextInt();
}

在将数组初始化为0时,将每个输入整数存储在a[0]处。因此,这本质上是不好的。但是尽管如此:

  for(int x : a)
{ System.out.println("  "+a); }

所以您不会超出范围。

一般来说,我想你想做的是

int[] a = new int[9];

 Scanner sc = new Scanner(System.in);

 for(int i=0;i<a.length.i++){
  a[i]=sc.nextInt();
}
  System.out.println("entered elements:");
  for(int x : a){
     System.out.println("  "+x);
}

答案 1 :(得分:0)

import json from '../../static/mockdata.json'

data: () => ({
  myjson: [],
  dialog: false,
  editedIndex: -1,
  editedItem: {
    type: '',
    id: '',
    tok: '',
    name: ''
  }
},
created () {
  this.myjson = json.Applications 
},
methods: {
  editItem (item) {
    this.editedIndex = json.Applications.indexOf(item)
    this.editedItem = Object.assign({}, item)
    this.dialog = true
  }
}

应该是

System.out.println("  "+a[x]);

而不是每个都使用,而是使用简单的for循环,如下所示:

System.out.println("  "+x);

答案 2 :(得分:0)

您要遍历值而不是索引。

int[] a = new int[9];  is equal to

int[] a = {0,0,0,0,0,0,0,0,0};

因此,我始终为0,而​​您仅将输入存储在[0]中

  for(int i:a){
       a[i]=sc.nextInt();
  }

答案 3 :(得分:0)

欢迎来到stackoverflow!

让我们快速回顾一下我认为您尝试过的高层次工作:

  • 初始化一个数组(大小为9)
  • 通过循环遍历数组,并将数组中位于循环位置的值设置为扫描器中的下一个整数
  • 最后,再次遍历数组,打印出数组中每个位置的元素

但是,有几个原因导致它无法正常运行:

您的数组是int类型的数组,它是原始类型(因此在Java中不被视为对象)-因此它不能像对象一样为null。因此,将为数组中的值分配默认值0({0,0,0,0,etc})。

考虑到这一点,第一个循环:

     for(int i:a)
     {
       a[i]=sc.nextInt();
     }

将遍历数组-但数组中的每个值均为0, 因此它将保持设置:

 a[0]=sc.NextInt();

这可以通过使用以下循环条件来解决,该循环条件根据数组的长度进行迭代-i代表数组中的位置,而不是数组中的值:

         for (int i=0;i<a.length;i++)
         {
           a[i] = sc.nextInt();
         }

最后,当您再次遍历数组中的值时,最后一次打印会导致超出范围的异常-假设上一个循环中的sc.nextInt()返回值15-尝试循环时位置a [15]-它不存在,因此您会看到超出范围的错误。

您可以通过简单地打印出数组中的当前值来解决此问题:

  for(int scannerValue : a)
   {
        System.out.println(scannerValue);
   }