我正在尝试使用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]);
}
}
}
输入后,它会超出范围
答案 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!
让我们快速回顾一下我认为您尝试过的高层次工作:
但是,有几个原因导致它无法正常运行:
您的数组是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);
}