2012-01-23 11 views
3

我有我正在为我的大学任务工作的以下代码。我被要求使用我正在使用的数组。我被要求使用for循环和if语句,我已经在做。我想出了下面的代码:检查输入与Java中的字符串数组中的项目

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; 
      } 
     } 
    } 
} 

现在,一切都以百万IFS无缝协作,并别人的,但我想知道是否有替换所有的if-else-if语句wirht方式一个或两个做这样的事情:

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

或者,也许更好的东西,如:

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

请让我知道,如果这个问题不够清楚。再次,这是一个大学作业,所以我会很感激解释。

回答

4

不改变你的数据结构的其他一些更有效的(比方说,一个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--; 
} 
+0

如果“地图”更好,我确实有时间和精力去寻找那个方向。由于我是一个Java新手,你是指Hashmaps还是我完全在这里? –

+1

@nickecarlo Hashmap是正确的,只要确保使用通用版本'Hashmap '(它可以提供更好的类型安全性)。您将定义一个局部变量,如下所示:Map codeToPriceAndTax = new HashMap ;'然后,您将在初始化期间向该映射添加代码/价格+税收对。在你的主循环中,你将使用'int priceAndTax = codeToPriceAndTax.get(userCode [i])'来通过代码循环价格+税。 – dasblinkenlight

+0

我会检查一下HashMap,谢谢。 –

2

变量codeListList并且它有一个contains函数,如果我明白你想要做什么可能会有所帮助。

此外,由于Java 7您可以使用字符串作为switch语句的参数,这将使您的代码看起来更好。

2

我没有看过完整的问题,所以这可能只是部分答案...但你问,如果你可以使用:

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

您可以使用类似...

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

,或者把这个到自定义数组类型...

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

基本上 - 你可以做你问什么,只是需要改变语法的顺序。但是,我相信,这只是让你思考的一部分答案。

1

无论何时,如果您有多个“if”语句,您也应该使用“switch”语句来查看。

看起来像一个switch语句会在这里节省很多行。

相关问题