Несколько операторов if else с использованием массива

1

Я думаю, что я, возможно, перепутал большое время. Идея оригинала: используйте массивы для увеличения значений, которые были введены. Как это работает: (внутри public static void main(String[] args))

  1. объявите размер 2 массивов обоих размеров.
  2. меньший массив используется для указания минимума для достижения следующего уровня.
  3. более крупный массив используется для добавления определенного значения, если он находится в уровне.
  4. набирается число.
  5. число рассчитывается на основе минимальной суммы и увеличения стоимости.

Я думаю, что я мог бы сделать лучше, если бы использовал 2d-массив, но больше не могу сказать.

Как он должен работать: (для 3 ярусов)

 Minimum no. | Increase by this if belong to this tier
      0      |      2
      10     |      5
      20     |      10

Если я вхожу в 4, я должен получить 6.
Если я вхожу в 13, я должен получить 18. И так далее.

import java.util.Scanner;

public class ValueIncrease {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int tierNo;
        double value;
        double[] Req, Increase;
        System.out.printf("\nHow many tiers are there?");
        tierNo = s.nextInt();
        Req = Increase = new double[tierNo];
        System.out.printf("\nEnter the minimum amounts to reach the next tiers.");
        System.out.printf("\n(Remember to seperate by commas.)");
        s.nextLine();
        String requirement = s.nextLine();
        String req[] = requirement.split(",");
        System.out.printf("\nEnter the increase for each tier.");
        System.out.printf("\n(Seperate by commas.)");
        String ValInc = s.nextLine();
        String ValueIncrease[] = ValInc.split(",");
        for (int i = 0; i < (tierNo - 1); i++) {
            try {
                Req[i] = Double.parseDouble(req[i]);
                Increase[i] = Double.parseDouble(ValueIncrease[i]);
            } catch (NumberFormatException nfe) {
            }
        }
        System.out.printf("\nEnter value: ");
        value = s.nextDouble();
        //calculate value
        int l = Req.length;
        for (int a = 0; a < (l - 1); a++) {
            if (value >= Req[l - a]) {
                value = value + Increase[l - a];
            } else {
            }
        }
    }
}
  • 0
    Что должно произойти, если пользователь вводит что-то выше, чем последний элемент?
  • 0
    А какой у тебя вопрос?
Показать ещё 3 комментария
Теги:

1 ответ

0
Лучший ответ

Здесь фиксированный код с комментариями, описывающими все неформатные изменения, которые я сделал:

import java.util.Scanner;

public class ValueIncrease {

    public static void main(String[] args) {

        Scanner s = new Scanner(System.in);

        int tierNo;
        double value;
        double[] minList; // changed var naming convention
        double[] incList;

        System.out.printf("\nHow many tiers are there?");
        tierNo = s.nextInt();
        // fixed allocation
        minList = new double[tierNo];
        incList = new double[tierNo];

        System.out.printf("\nEnter the minimum amounts to reach the next tiers.");
        System.out.printf("\n(Remember to seperate by commas.)");
        s.nextLine();
        String minStr = s.nextLine();
        String minStrList[] = minStr.split(",");
        System.out.printf("\nEnter the increase for each tier.");
        System.out.printf("\n(Seperate by commas.)");
        String incStr = s.nextLine();
        String incStrList[] = incStr.split(",");

        for (int i = 0; i < tierNo; i++) { // fixed loop max
            try {
                minList[i] = Double.parseDouble(minStrList[i]);
                incList[i] = Double.parseDouble(incStrList[i]);
            } catch (NumberFormatException nfe) {}
        } // end for

        while (true) { // added while loop for more efficient testing

            System.out.printf("\nEnter value (negative to exit): ");
            value = s.nextDouble();
            if (value < 0.0) break;

            // calculate value
            for (int i = tierNo-1; i >= 0; i--) { // changed loop direction
                if (value >= minList[i]) {
                    value = value + incList[i];
                    break; // added break
                } // end if
            } // end for

            System.out.printf("Result: %f", value ); // added print statement

        } // end while

    } // end main()

} // end class ValueIncrease

Резюме:

  • Улучшено соглашение об именах переменных, чтобы быть более последовательным и описательным.
  • Синтаксис a = b =...; присваивает a и b одному значению (результат оценки выражения ...). Таким образом, вы не можете назначить две ссылочные переменные одному и тому же new выражению, если вы хотите, чтобы они ссылались на отдельные распределения. Поэтому мне пришлось отделить выделение minList и incList двух отдельных операторов, каждый из которых имеет свой собственный new вызов.
  • Не уверен, почему ваш цикл max для синтаксического анализа for-loop был tierNo-1; он должен быть tierNo. Оператор сравнения в условном tierNo-1 <, таким образом, i буду перебирать от 0 до уровня tierNo-1 естественно, без необходимости вычитать его из циклы max.
  • Добавлен оператор while-loop и print для упрощения тестирования нескольких входных значений в отношении одного и того же определения уровня.
  • Изменил вычисление for-loop, чтобы итератировать вниз и сломаться, как только найден подходящий уровень.

Демо-версия:

bash> ls;
ValueIncrease.java

bash> javac ValueIncrease.java;

bash> ls
ValueIncrease.class*  ValueIncrease.java;

bash> CLASSPATH=. java ValueIncrease;

How many tiers are there?3

Enter the minimum amounts to reach the next tiers.
(Remember to seperate by commas.)0,10,20

Enter the increase for each tier.
(Seperate by commas.)2,5,10

Enter value (negative to exit): 0
Result: 2.000000
Enter value (negative to exit): 1
Result: 3.000000
Enter value (negative to exit): 2
Result: 4.000000
Enter value (negative to exit): 8
Result: 10.000000
Enter value (negative to exit): 9
Result: 11.000000
Enter value (negative to exit): 10
Result: 15.000000
Enter value (negative to exit): 11
Result: 16.000000
Enter value (negative to exit): 12
Result: 17.000000
Enter value (negative to exit): 19
Result: 24.000000
Enter value (negative to exit): 20
Result: 30.000000
Enter value (negative to exit): 21
Result: 31.000000
Enter value (negative to exit): 22
Result: 32.000000
Enter value (negative to exit): 100
Result: 110.000000
Enter value (negative to exit): 3248957
Result: 3248967.000000
Enter value (negative to exit): -3
  • 0
    Благодарю. Я все еще новичок в этом, поэтому я забыл, что петли могут пойти другим путем.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню