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

问题描述 投票:0回答:2

我试图找到一种方法,通过使用增强的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);
    }
}

}
java arrays for-loop
2个回答
1
投票

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

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

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


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);
    }
}

}

要么

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);
    }
}

}
© www.soinside.com 2019 - 2024. All rights reserved.