Как создать массив определенной длины? - PullRequest
1 голос
/ 05 мая 2019

Я пытаюсь принять определенное число в качестве входных данных и создать массив такой же длины.Я знаю, что массив проиндексирован, начиная с 0 до n-1, для массива длины n.

Я не могу понять, где я допустил ошибку.

import java.util.Scanner;

public class A {

  public static void main(String[] args) {

    Scanner read = new Scanner(System.in);
    System.out.println("Enter the number of test cases:");
    int test = read.nextInt();
    String[] name = new String[test];


    if (test > 0 && test <= 20) {

      System.out.println("Please give " + test + " names:");

      for (int i = 0; i < name.length; i++) {

        name[i] = read.nextLine();


      }
    }
  }
}

Ожидание: дляНапример, если входное значение равно 9, получается массив размера 9: если входное значение равно 9, размер создаваемого массива равен 8

.

Ответы [ 3 ]

0 голосов
/ 05 мая 2019

Проблема в том, что после read.nextInt() ваша позиция находится после int непосредственно перед концом строки, поэтому первый read.nextLine () в цикле будет читать пустую строку.Вы можете сделать read.nextLine() перед циклом или вместо nextInt вы можете прочитать с помощью nextLine () и привести к int с помощью parseInt (), если вы уверены, что нажали ввод после int.Например, вместо

int test = read.nextInt();

do

int test = Integer.parseInt(read.nextLine());

Если вы не хотите требовать ввода, вы можете изменить

    name[i] = read.nextLine();

на

    name[i] = read.next();
0 голосов
/ 05 мая 2019

Проблема не в массивах, а в read.nextLine ().Вы можете использовать read.next ().

0 голосов
/ 05 мая 2019

Просто используйте .next() вместо .nextLine(). Он анализирует только следующий элемент командной строки. При этом вы также можете вводить все имена в одну строку, поскольку сканер разделяется пробелами вместо строк.

См. Документацию Java для получения дополнительной информации о двух методах. https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html

...