简体   繁体   English

用Java检查字符串数组中项目的输入

[英]Checking Input Against Items in a String Array in Java

I have the following code that I am working on for my college assignment. 我有以下代码,我正在为我的大学任务工作。 I am asked to use arrays, which I am using. 我被要求使用我正在使用的数组。 I am asked to use for-loops and if-statement that I am doing already. 我被要求使用for循环和if语句,我已经在做了。 I have come up with the following code: 我想出了以下代码:

class HardwareStore2 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        System.out.printf("%55s", "**WELCOME TO THE HARDWARE STORE**\n");
        System.out.printf("%55s", "=================================\n");

        String [] codes = {"G22", "K13", "S21", "I30"};
        String [] description = {"STICKY Construction Glue", "CAR-LO Key Ring", "SCREW-DUP Screwy Screws", "LET-IT-RAIN Padlock"};
        List<String> codeList = Arrays.asList(codes);
        String output = "";
        int i = 1000;
        String [] userCode = new String[i];
        char dolSymb = '$';
        int [] pricesAndTax = {10989, 5655, 1099, 4005, 20};
        int [] weight = {};
        int [] userQuantity = {1};
        int [] userPrice = new int[i];
        int userStickyPrice = 0;
        int userKeyringPrice = 0;
        int userScrewyPrice = 0;
        int userPadlockPrice = 0;
        int userPreWithTax = 0;
        int userTotal = 0;
        int userPreTotal = 0;
        int userShipping = 0;

        System.out.printf("%-10s%-40s%-15s%-10s\n", "CODE", "DESCRIPTION", "WEIGHT", "PRICE\n");
        System.out.printf("%-10s%-55s%s%d.%02d\n", codes[0], description[0], dolSymb, pricesAndTax[0]/100, pricesAndTax[0]%100);
        System.out.printf("%-10s%-55s%s%d.%02d\n", codes[1], description[1], dolSymb, pricesAndTax[1]/100, pricesAndTax[1]%100);
        System.out.printf("%-10s%-55s%s%d.%02d\n", codes[2], description[2], dolSymb, pricesAndTax[2]/100, pricesAndTax[2]%100);
        System.out.printf("%-10s%-55s%s%d.%02d\n", codes[3], description[3], dolSymb, pricesAndTax[3]/100, pricesAndTax[3]%100);

        System.out.println("PLEASE ENTER YOUR ORDER:");
        System.out.print("NAME: ");
        String username = in.nextLine();
        System.out.print("ADDRESS Line 1: ");
        String address1 = in.nextLine();
        System.out.print("ADDRESS Line 2: ");
        String address2 = in.nextLine();
        System.out.print("POSTAL CODE: ");
        String postalcode = in.nextLine();

        for (i = 0;; i++) {
            System.out.print("CODE (X to QUIT):");
            userCode[i] = in.nextLine();

            if (userCode[i].equalsIgnoreCase("x")) {
                break;
            }

            System.out.print("QUANTITY: ");
            userQuantity[i] = in.nextInt();
            in.nextLine();

            if (userCode[i].equalsIgnoreCase(codes[0])) {
                userStickyPrice += userQuantity[i]*pricesAndTax[0];

            }
            else if (userCode[i].equalsIgnoreCase(codes[1])) {
                userKeyringPrice += userQuantity[i]*pricesAndTax[1];

            }
            else if (userCode[i].equalsIgnoreCase(codes[2])) {
                userScrewyPrice += userQuantity[i]*pricesAndTax[2];

            }
            else if (userCode[i].equalsIgnoreCase(codes[3])) {
                userPadlockPrice += userQuantity[i]*pricesAndTax[3];

            }
            else if (!codeList.contains(userCode)) {
                i = i - 1;
            }
        }
     }
}

Now, everything is working seamlessly with a million ifs, and elses but I want to know if there is a way to replace all the if-else-if statements wirht one or two that do something like this: 现在,一切都与一百万个ifs和elses无缝协作,但我想知道是否有办法替换所有if-else-if语句中的一个或两个执行类似这样的操作:

if (userCode[i].contains(codes[0], codes[1], codes[2], codes[3] {}

Or maybe something better like: 或者更像是:

if (userCode.contains(any.one.item.in.codeList) {
    then.get.the.price.of.that.item.and.do.item.specific.operations
    }

Please let me know if the question is not clear enough. 如果问题不够清楚,请告诉我。 And once again, this is a college assignment so I would appreciate explanations. 再一次,这是一项大学任务,所以我很感激解释。

Without changing the rest of your data structures for something more efficient (say, a Map ) you could achieve the same effect with a single if and a nested loop: 在不更改其余数据结构以获得更高效的内容(例如, Map )的情况下,您可以使用单个if和嵌套循环实现相同的效果:

boolean found = false;
for (int j = 0 ; !found && j != codes.length ; j++) {
    if (userCode[i].equalsIgnoreCase(codes[j])) {
        userScrewyPrice += userQuantity[i]*pricesAndTax[j];
        found = true;
    }
}
if (!found) {
    i--;
}

The variable codeList is a List and it has a contains function that could be helpful if I understood what you're trying to do. 变量codeList是一个List ,它有一个contains函数,如果我理解你要做的事情可能会有所帮助。

Also, since Java 7 you can use strings as an argument of switch statements and that would make your code look nicer. 此外,从Java 7您可以使用字符串作为switch语句的参数,这将使您的代码看起来更好。

I didn't read the full question so this may only be a part answer... but you ask if you could use: 我没有阅读完整的问题所以这可能只是一个部分答案...但你问你是否可以使用:

if (userCode[i].contains(codes[0], codes[1], codes[2], codes[3] {}

You may be able to use something like... 你也许可以使用......

if(new string[]{"a","b","c"}.Contains("a")) {}

or to put this into custom array types... 或者把它放到自定义数组类型中......

arrayType[] a = new arrayType[]{item1, item2, item3}
if (arrayType.Contains(searchItem)) {}

Basically - you can do what you asked, just need to change the order of the syntax. 基本上 - 你可以做你所要求的,只需要改变语法的顺序。 But this, I'm sure, is only a part answer to get you thinking. 但是,我确信,这只是让你思考的部分答案。

Anytime that you have multiple "if" statements you should also look at using a "switch" statement instead. 任何时候你有多个“if”语句,你也应该看一下使用“switch”语句。

Looks like a switch statement would save quite a bit of lines here. 看起来像switch语句会在这里保存很多行。

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

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