Пользовательский ввод в 2 отдельных массива в Java

#java #arrays #input

#java #массивы #ввод

Вопрос:

Я совершенно новичок в языке Java. Я все еще учусь и практикую это, но при решении проблемы я застрял на этом. Что я хочу сделать, так это добавить 2 элемента на строку в 2 отдельных массива. Первый элемент переходит в массив X, а второй элемент переходит в массив Y.

 public static void main (String[] args) throws IOException {
        BufferedReader reader =new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());

        double[] X = new double[n];
        double[] Y = new double[n];

        String[] elem = reader.readLine().split(" ");
        for(int i = 0; i < n; i  )
        {

                X[i] = Integer.parseInt(elem[n]);
                Y[i] = Integer.parseInt(elem[n]);

        }

        System.out.println(X, Y);
    }
  

ввод:

3 4

1 1

2 3

где первый столбец — это массив X, а второй столбец — массив Y. Я несколько раз играл с кодом, но он по-прежнему выдает мне «Индекс 2 вне границ для длины 2».

Комментарии:

1. Соглашения об именовании Java имеют переменные и методы, начинающиеся со строчной буквы (x, y).

Ответ №1:

Вы должны прочитать свои строки внутри цикла for. X[i] соответствует elem[0] ; Y[i] соответствует elem[1] . Например:

 import java.io.*;
import java.util.*;
public class App {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(reader.readLine());

        double[] X = new double[n];
        double[] Y = new double[n];

        for (int i = 0; i < n; i  ) {
            String[] elem = reader.readLine().split(" ");
            X[i] = Integer.parseInt(elem[0]);
            Y[i] = Integer.parseInt(elem[1]);
        }
        System.out.println(Arrays.toString(X));
        System.out.println(Arrays.toString(Y));
    }
}
  

Комментарии:

1. Большое спасибо. это действительно помогло и работало по мере необходимости

Ответ №2:

Эта часть неверна:

     for(int i = 0; i < n; i  )
    {
            X[i] = Integer.parseInt(elem[n]);
            Y[i] = Integer.parseInt(elem[n]);
  

Кажется, что это должно быть

     for(int i = 0; (i - 1)< n; i = 2) // adding two because you are reading two values from elem in every iteration. Changed check to i - 1 to fix case where an odd number of entries will cause an ArrayOutOfBoundsException in elem on i/2   1
    {
            X[i/2] = Integer.parseInt(elem[i]);
            Y[i/2] = Integer.parseInt(elem[i]   1);
  

(В моем ответе здесь была ошибка. Это было исправлено)

В качестве альтернативы:

 for(int i = 0; i < n; i  )
{
  if (i % 2 == 0) X[i/2] = Integer.parseInt(elem[i]);
    else Y[i/2] = Integer.parseInt(elem[i]);