使用数组的多个if else语句

时间:2015-03-27 20:29:05

标签: java

我想我可能搞砸了很多时间。 最初的想法:使用数组来增加已输入的值。 工作原理:(在public static void main(String[] args)内)

  1. 声明两个相同大小的2个数组的大小。
  2. 较小的数组用于表示到达下一层的最小值。
  3. 较大的数组用于添加特定值(如果它在层中)。
  4. 输入一个数字。
  5. 数字是根据最低金额和价值增加计算的。
  6. 我认为如果我使用过二维数组,我本可以做得更好,但我不能再说了。

    它应该如何工作:( 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 {
                }
            }
        }
    }
    

1 个答案:

答案 0 :(得分: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 = ...;ab分配给相同的值(表达式...的评估结果)。因此,如果您希望它们引用单独的分配,则不能将两个引用变量分配给同一个new表达式。因此,我必须将minListincList的分配分成两个单独的语句,每个语句都有自己的new调用。
  • 不确定为什么解析for-loop的循环最大值为tierNo-1;它应该是tierNo。条件中的比较运算符为<,因此i将自然地从0迭代到tierNo-1,而不需要从最大循环中减去一个。
  • 添加了while循环和print语句,以便针对相同的层定义更轻松地测试多个输入值。
  • 将-循环的计算更改为向下迭代,并在找到合适的层后中断。

演示:

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