Проблема вычисления диапазона из заполненного массива (Java) - PullRequest
0 голосов
/ 21 декабря 2018

В настоящее время я выполняю задание по курсу доступа к информатике.Ниже я приведу скриншот проекта для контекста.Наш учитель дал нам фрагменты кода для начала работы.В этом случае он дал нам код, который заполняет 2 массива от пользователя.Я написал код, который находит наименьшее число в массиве (для вычисления диапазона), и он работает.Как показано ниже ...

Контекст: https://i.imgur.com/sReC8ym.png

public static void main(String[] args) {
    double[] values = {81, 52, 10, 50, 18, 4, 7};
    double smallest = values[0];
    for (int i = 0; i < values.length; i++) {
        if (values[i] < smallest) {
            smallest = values[i];

        }
    }
    System.out.println(smallest);
}

Однако, когда я внедряю этот код в свой проект, результат всегда равен 0. Я считаю, что проблема заключается вфрагмент кода.Функция, которая находит наибольшее число, работает в проекте.Работает поиск наибольшего числа и наименьшее число, но результат наименьшего числа всегда равен 0. Я вставил всю программу ниже.Извините, если это слишком много работы, чтобы исправить, у вас есть какой-нибудь совет?Спасибо

public static String[] strings;
public static double[] data;

public static void main(String[] args) {

    populatArrays();
    printArrays(strings, data);
    double theAverage = calculateAverage(data);
    System.out.println("The average rainfall is " + theAverage);
    double largest = getLargest(data);
    System.out.println("The largest amount of rainfall is " + largest);
    double smallest = getSmallest(data);
    System.out.println("The smallest amount of rainfall is " + smallest);
    double theRange = getRange(data);
    System.out.println("The rainfall range is " + theRange);
    double theTotal = getTotal(data);
    System.out.println("The total rainfall is " + theTotal);
}

//User input for the array & printing out questions
public static void populatArrays() {

    Scanner input = new Scanner(System.in);
    System.out.println("How many cities would you like to add to the Rainfall calculator?");
    int elements = input.nextInt();
    String[] someStrings = new String[elements];
    double[] someData = new double[elements];

    for (int i = 0; i < someData.length; i++) {
        input = new Scanner(System.in);
        System.out.println("Enter a City");
        someStrings[i] = input.nextLine();
        System.out.println("Enter the annual rainfall");
        someData[i] = input.nextDouble();
    }
    strings = someStrings;
    data = someData;
}

//code printing out the array on screen
public static void printArrays(String[] stringArray, double[] doubleArray) {

    for (int i = 0; i < stringArray.length; i++) {
        System.out.println("City: " + stringArray[i]);
        System.out.println(doubleArray[i] + "mm");

    }
}

//code calculating the mean average
public static double calculateAverage(double[] thenumbers) {

    double sum = 0;
    for (double thenumber : thenumbers) {
        sum += thenumber;
    }

    double result = sum / thenumbers.length;
    return result;

}

//code calculating the largest number in the array
public static double getLargest(double[] thenumbers) {

    double largest = 0;

    for (int i = 0; i < thenumbers.length; i++) {
        if (thenumbers[i] > largest) {
            largest = thenumbers[i];
        }
    }

    return largest;
}

//code calculating the smallest number in the array
public static double getSmallest(double[] thenumbers) {

    double smallest = 0;

    for (int i = 0; i < thenumbers.length; i++) {
        if (thenumbers[i] < smallest) {
            smallest = thenumbers[i];
        }
    }

    return smallest;
}

// code calculating the range
public static double getRange(double[] thenumbers) {

    double largest = getLargest(data);
    double smallest = getSmallest(data);

    double theRange = largest + smallest;

    return theRange;

}

// code calculating the total rainfall in the array
public static double getTotal(double[] thenumbers) {

    double sum = 0;
    for (double thenumber : thenumbers) {
        sum += thenumber;
    }
    double theTotal = sum;
    return theTotal;

}

}

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Вы не должны инициализировать с помощью double smallest = 0;

Это означает, что, если в вашем массиве нет отрицательного числа, это сравнение никогда не будет успешным.

if (thenumbers[i] < smallest)

То, что вам нужно сделать, это инициализировать с помощью

double smallest = Double.MAX_VALUE

Это означает, что ваше условное выражение пройдет хотя бы один раз по сравнению с любым другим числом в массиве.Другой вариант - инициализировать его произвольным числом из массива (например, первым числом).

double smallest = thenumbers[0]

Затем продолжить цикл оттуда, вы можете изменить цикл на

for (int i = 1; i < thenumbers.length; i++) {

, чтобы пропустить бесполезное сравнение первого значения с самим собой.

Это предполагает, что у вас есть хотя бы одно значение в массиве, что не всегда является безопасным предположениемно, вероятно, хорошо для тривиального примера проблемы, как это.

0 голосов
/ 21 декабря 2018

Вы устанавливаете начальное значение наименьшего на 0

Поскольку ни одно из данных не меньше 0, наименьшее никогда не будет установлено на другое число.

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

double smallest = thenumbers[0];

Вы также делаете то же самое в функции getLargest, так что если наибольшее число в вашем спискеотрицательное значение вернет 0.

В качестве дополнительного бонуса вы можете также немного сжать код, используя оператор for in / each :

//code calculating the smallest number in the array
public static double getSmallest(double[] thenumbers) {

  double smallest = thenumbers[0];

  for (double num : thenumbers) {
    if (num < smallest) {
      smallest = num;
    }
  }

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