使用Enhanced For Loop为数组分配新值

时间:2018-03-03 07:04:04

标签: java arrays for-loop

我试图找到一种方法,通过使用增强的For循环从扫描仪输入为数组赋值。但我没有看到我能做到的方法。

在下面的代码中,我声明了一个getInput()方法,它循环遍历数组并从扫描仪输入中分配数字。但是在增强For循环的情况下我不能真正使用这样的东西 -

For(int i: baseData){
//basedata[i]=scanner.nextInt()}

因为baseData数组在迭代时不会返回任何值,所以我想如何迭代scan.nextInt()并在数组中赋值,但scanner .nextInt()不是数组。 那么这个问题的简单解决方案是什么呢?

package com.ksk;

import java.util.Scanner;

public class Main {

private static Scanner scanner = new Scanner(System.in);
private static int[] baseData = new int[4];

public static void main(String[] args) {

    System.out.println("Enter 4 numbers here");
    getInput();
    printInput();
}

static void getInput() {
    for (int i = 0; i < baseData.length; i++) {
        baseData[i] = scanner.nextInt();
    }
}

static void printInput() {
    for (int i : baseData) {
        System.out.println(i);
    }
}

}

2 个答案:

答案 0 :(得分:1)

for-each循环隐藏迭代器,因此您无法使用一个更新数组(至少在没有添加新计数器/迭代器的情况下)。相反,假设您使用的是Java 8+,则可以使用IntStream编写Scanner生成器。像,

private static int[] baseData = IntStream.generate(() -> scanner.nextInt())
        .limit(4).toArray();

然而,这只是一个例子,在现实生活中我更喜欢用意外输入更宽容的代码。

答案 1 :(得分:0)

试试这样。

import java.util.Scanner;
import java.util.stream.IntStream;

public class Main {

private static Scanner scanner = new Scanner(System.in);
private static int[] baseData = IntStream.generate(() -> scanner.nextInt())
.limit(4).toArray();

public static void main(String[] args) {

    System.out.println("Enter 4 numbers here");
    printInput();
}


static void printInput() {
    for (int i : baseData) {
        System.out.println(i);
    }
}

}

OR

import java.util.Scanner;

public class Main {

private static Scanner scanner = new Scanner(System.in);
private static int[] baseData = new int[4];

public static void main(String[] args) {

    System.out.println("Enter 4 numbers here");
    getInput();
    printInput();
}

static void getInput() {
    int position =0;
    for(int i:baseData){
         baseData[position] = scanner.nextInt();
        position++;
    }
}

static void printInput() {
    for (int i : baseData) {
        System.out.println(i);
    }
}

}