简体   繁体   English

使用数组的多个if else语句

[英]Multiple if else statements using array

I think I may have messed up big time. 我想我可能已经忙得不可开交了。 Original idea: Use arrays to increase values that have been inputted. 最初的想法:使用数组增加已输入的值。 How it works: (inside public static void main(String[] args) ) 工作原理:(在public static void main(String[] args)

  1. declare the size of the 2 arrays, both same size. 声明两个数组的大小,两个大小都相同。
  2. smaller array is used to state the minimum to reach the next tier. 较小的数组用于说明到达下一层的最小值。
  3. larger array is used to add a specific value if it is in a tier. 较大的数组用于在层中添加特定值。
  4. a number is typed in. 输入一个数字。
  5. number is calculated based on minimum amount and value increase. 数量是根据最小数量和增值计算的。

I think that I could have done better if I had used a 2d array, but I can't really tell anymore. 我认为如果使用2d数组本来可以做得更好,但是我真的不能再说了。

How it's supposed to work: (for 3 tiers) 它应该如何工作:(3层)

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

If I enter 4, I should get 6. 如果输入4,我应该得到6。
If I enter 13, I should get 18. And so on. 如果输入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 {
            }
        }
    }
}

Here's fixed code, with comments describing all the non-formatting changes I made: 这是固定的代码,其中的注释描述了我进行的所有非格式更改:

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

Summary: 摘要:

  • Improved the variable naming convention to be more consistent and descriptive. 改进了变量命名约定,使其更加一致和更具描述性。
  • The syntax a = b = ...; 语法a = b = ...; assigns a and b to the same value (the result of evaluation of the expression ... ). ab赋予相同的值(表达式...的求值结果)。 Thus, you cannot assign two reference variables to the same new expression, if you want them to refer to separate allocations. 因此,如果希望它们引用单独的分配,则不能将两个引用变量分配给同一new表达式。 Hence I had to separate the allocation of minList and incList into two separate statements, each with its own new call. 因此,我不得不将minListincList的分配分成两个单独的语句,每个语句都有自己的new调用。
  • Not sure why your loop max on the parsing for-loop was tierNo-1 ; 不知道为什么for循环的最大循环数是tierNo-1 ; it should be tierNo . 它应该是tierNo The comparison operator in the conditional is < , thus, i will iterate from 0 to tierNo-1 naturally, with no need to subtract one from the loop max. 条件中的比较运算符是< ,因此, i自然会从0迭代到tierNo-1 ,而无需从循环最大值中减去1。
  • Added a while-loop and print statement for easier testing of multiple input values against the same tier definition. 添加了while循环和print语句,可以更轻松地针对相同的层定义测试多个输入值。
  • Changed the calculation for-loop to iterate downwards and break once a suitable tier has been found. 将计算for循环更改为向下迭代,并在找到合适的层后中断。

Demo: 演示:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM