Java 用户输入数组只捕获 3 个整数而不是 5 个

Java User Input array is only capturing 3 integers instead of five

此代码应该捕获 5 个用户整数,打印出来,然后反向打印。它只捕获第一个整数,打印 3 次,然后再打印第一个整数 5 次而不反转。测试以 "Process finished with exit code 0" 结束,我认为这表明程序已完成且没有错误——这当然是不正确的。我认为问题在于用户输入数组的存储方式。我将它分配为 userNum[i] 和 5 的有限数组,并且 int i =0 以在 userNum[0] 处开始数组存储,所以我不清楚为什么所有输入都没有捕获到 userNum[4 ]. 感谢您提供的任何见解。我是 java 的新手,这是我 java class.

的准备工作
import java.util.Scanner;

public class ArrayReverse {

    public static void main(String[] args) {
        Scanner scnr = new Scanner(System.in); // scanner for input
        final int NUM_VALS = 5; // number on int user able to enter
        int[] userNum = new int[NUM_VALS]; // user integers storage
        int j = 0;
        int i = 0;

        System.out.println("Enter integer values: ");
        userNum[i] = scnr.nextInt(); // capture user input int

        for (j = 0; j < NUM_VALS; j++) {
            System.out.print("You entered: ");
            System.out.println(userNum[i]);
            ++j;
        }
        System.out.print("\nNumbers in reverse: "); // statement to Print reversed array
        for (j = NUM_VALS - 1; j >= 0; j--) {
            System.out.print(userNum[i] + " ");
        }
    }
}

您需要更多地研究 for 循环并研究如何在 for 循环中迭代值,i,j 变量中的问题。

我在这里修复你的代码。

import java.util.Scanner;

public class ArrayReverse {

public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in); // scanner for input
    final int NUM_VALS = 5;  // number on int user able to enter
    int[] userNum = new int[NUM_VALS]; // user integers storage
    int j = 0;
    int i = 0;
   //for 5 inputs you need loop
   for(;i<NUM_VALS;i++){
    System.out.println("Enter integer values: ");
        userNum[i] = scnr.nextInt(); // capture user input int
   }

    for (j = 0; j < NUM_VALS; j++) {
        System.out.print("You entered: ");
        System.out.println(userNum[j]);
        //++j; //no need to increment as you already did in for loop
    }
    System.out.print("\nNumbers in reverse: "); // statement to Print reversed array
    for (j = NUM_VALS - 1; j >= 0; j--) {
        System.out.print(userNum[j] + " ");// userNum[0] = your last value which you reverse 
    }


}
}

这是一个使用集合框架的解决方案:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class ArrayReverse {

  public static void main(String[] args) {
    Scanner scnr = new Scanner(System.in); // scanner for input
    final List<Integer> numbers = new ArrayList<>();
    System.out.println("Enter any number of integers. (whitespace delimited. enter a non-integer to quit.): ");
    while (scnr.hasNextBigInteger()) {
      final int n = scnr.nextInt();
      System.out.println("Parsed: " + n);
      numbers.add(n);
    }
    System.out.println("Done reading user input.");
    System.out.println("Your input: " + numbers);
    Collections.reverse(numbers);
    System.out.println("Your input reversed: " + numbers);
  }
}

我已经为您提供了解决方案。这是一种干净的方式。
nextInt() 读取用户输入的下一个整数。请注意,如果用户未输入整数作为值,这将抛出 InputMismatchException

 public static void main(String[] args) {

    Scanner scanner = new Scanner(System.in);
    List<Integer> input = new ArrayList<Integer>();

    //Simple loop that will read 5 user inputs
    //and add them to the input list
    for(int i = 0; i < 5; i++){
        input.add(scanner.nextInt());
    }

    //print the 5 values
    for(Integer val : input){
        System.out.println(val);
    }

    //reverse the 5 values
    Collections.reverse(input);

    //print the 5 values again, but they are now reversed
    for(Integer val : input){
        System.out.println(val);
    }
}