Как получить пользовательский ввод по размеру и заполнить массив из метода - PullRequest
0 голосов
/ 09 февраля 2020

Я относительно новичок в Java и не понимаю, почему мой код не работает должным образом. Я создаю калькулятор, используя методы и массивы. В моем коде метод getOperand, который я предоставил ниже, должен сначала запросить у пользователя достаточно значений для заполнения массива, а затем вернуть их массив. Это где я запутался. Если я должен go использовать один и тот же метод, чтобы получить размер массива и заполнить массив из пользовательского ввода, правильно ли я настраиваю массив? Можно ли вернуть оба? Ниже я попробовал то, что, как я думал, будет работать, но, похоже, не работает. Когда я пытаюсь заполнить массив, я получаю ArrayIndexOutOfBoundsException

if(selection == 1) {

    double operand1[] = getOperand("Please enter the values for the first array, with a space after each input", size);
    double operand2[] = getOperand("Please enter the values for the second array, with a space after each input", size);

    System.out.println(add(operand1, operand2));


public static double[] getOperand(String prompt, int size) {    
Scanner input = new Scanner(System.in);
System.out.println("Please enter the size for the array");
size = input.nextInt();

double operand[] = new double[size];
for (int x = 0; x < size; x++) {

    operand[size] = input.nextDouble();
}
                                                                            // creating new arrays

System.out.println(prompt);
return operand;

У меня нет других настроенных методов, я сначала пытаюсь узнать, как получить пользовательские входные данные для заполнения массива. Я также, к сожалению, не могу добавить какие-либо новые методы, так как мои методы уже определены для меня. Вот список методов.

public static double[] add(double[] operand1, double[] operand2)
public static double[] subtract(double[] operand1, double[] operand2)
public static double[] multiply(double[] operand1, double[] operand2)
public static double[] divide(double[] operand1, double[] operand2)
public static double[] dotProduct(double[] operand1, double[] operand2)
public static double[] random(double lowerlimit, double upperlimit, int size)

Ответы [ 2 ]

1 голос
/ 09 февраля 2020

Во-первых, будьте более точны с вопросом, поскольку довольно трудно понять, что вы пытаетесь выполнить sh, вы можете дать больше информации о том, какую операцию вы пытаетесь выполнить.

Так что, если я правильно понимаю, вы пытаетесь получить размер массива, затем получить от пользователя два числа (те, которые будут добавлены в массив), а затем сложить их вместе.

int size = getOperand("What size would you like the array", size);
double operand1[] = getOperand("What would you like the first number to be", size);
double operand2[] = getOperand("What would you like the second number to be", size);
System.out.println(add(operand1, operand2));

Эти строки не имеют никакого смысла, так как вы просите пользователя ввести размер массива, однако ваш метод возвращает массив. Также в вашем getOperand в любом случае вы спрашиваете своего пользователя о размере. Поэтому используйте ваш метод getOperand как функцию, которая создает для вас массив. например,

public static double[] getOperand(String prompt) {

        Scanner input = new Scanner(System.in);
        System.out.println(prompt);

        int size = input.nextInt();
        double operand[] = new double[size]; // creating new arrays

        return operand;
    }

(порядок ваших операций был неправильным, так как вы вводили пользовательский ввод перед тем, как задавать пользователю вопрос.)

Вы должны создать другой метод, который принимает удвоение от пользователь, например

    {
        Scanner input = new Scanner(System.in);
        System.out.println(Message);
        return (input.nextDouble());

    }

Это поможет вам взять числа у пользователя и затем поместить их в правильные записи массива.

Также double operand1[] = getOperand("What would you like the first number to be", size); также не имеет смысла , Это потому, что вы пытаетесь получить число у пользователя, но вы не пытаетесь получить доступ к записям из массива и фактически добавить их, но вы пытаетесь создать другой массив? это не имеет никакого логического смысла. Что вы должны были сделать, это создать массив, а затем поместить числа, которые пользователь вводит, в первую и вторую запись (0 и 1). Я приведу пример в псевдокоде, чтобы вы могли сами его кодировать;

CREATE array NAME userNumber TYPE double = SIZE userInputForSize
usernumber ENTRY 0 = userInputDouble
usernumber ENTRY 1 = userInputDouble
DOUBLE result = SUM(usernumber ENTRY 0, usernumber ENTRY 1)
print("The sum of your numbers is" result)

Если вы дадите больше информации, я могу помочь больше.

0 голосов
/ 09 февраля 2020

Я вижу здесь проблему

int size = getOperand("What size would you like the array", size);

Ваш метод getOperand должен возвращать double[]. Тем не менее, вы храните его в переменной размера типа int.

Следующая проблема заключается в том, что вторым параметром вашего метода getOperand является int size. Однако вы в своем исправлении изменили int size на double[] size. Я не уверен, что именно ваш код пытается выполнить sh, поэтому я не могу дать реализацию.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...