2016-10-15 3 views
1

Я хочу сохранить две строки в двумерном массиве String и использовать ее для других методов.Loop through 2D Array

Мой Массив:

String[][] x = {{"Iron Ice Tea", "5"}, {"Clock Clock", "3"}, {"Shoe Telephone", "3"}}; 

Мой метод:

public static String getInsertedCustomerOrder(String[][] input) { 
     String query = ""; 
     int x = 0; 

    for (String[] product : input) { 
     for (String count : product) { 
      if (x == 0) { 
      query = query + "((SELECT PRICE FROM PRODUCT WHERE NAME = '" + product + "') * " + count + " + "; 
      } else { 
      query = query + "(SELECT PRICE FROM PRODUCT WHERE NAME = '" + product + "') * " + count + " + "; 
      } 
      x++; 
     } 
    } 

    if (query != null && query.length() > 0 && query.charAt(query.length() - 2) == '+') { 
     query = query.substring(0, query.length() - 2); 
    } 

    query = query + ")"; 

    return query; 
} 

Выход:

((SELECT PRICE FROM PRODUCT WHERE NAME = '[Ljava.lang.String;@1db9742') * Iron Ice Tea + (SELECT PRICE FROM PRODUCT WHERE NAME = '[Ljava.lang.String;@1db9742') * 5 + (SELECT PRICE FROM PRODUCT WHERE NAME = '[Ljava.lang.String;@106d69c') * Clock Clock + (SELECT PRICE FROM PRODUCT WHERE NAME = '[Ljava.lang.String;@106d69c') * 3 + (SELECT PRICE FROM PRODUCT WHERE NAME = '[Ljava.lang.String;@52e922') * Shoe Telephone + (SELECT PRICE FROM PRODUCT WHERE NAME = '[Ljava.lang.String;@52e922') * 3)

Принимая во внимание, что Shoul d be:

((SELECT PRICE FROM PRODUCT WHERE NAME = 'Iron Ice Tea') * 5)) 
+0

Также, пожалуйста, отформатируйте свой код должным образом. – theVoid

+0

Есть ли причина, по которой вы храните значения в 2D-массиве, а не в классе Order? – wfunston

ответ

0

Попробуйте это.

public static String getInsertedCustomerOrder(String[][] input) { 
    boolean first = true; 
    String query = ""; 
    for (String[] product : input) { 
     if (first) 
      first = false; 
     else 
      query += " + "; 
     query += "(SELECT PRICE FROM PRODUCT WHERE NAME = '" + product[0] + "') * " 
       + product[1]; 
    } 
    query = "(" + query + ")"; 
    return query; 
} 

И

String[][] input = { { "Iron Ice Tea", "5" }, { "Clock Clock", "3" }, { "Shoe Telephone", "3" } }; 
System.out.println(getInsertedCustomerOrder(input)); 

Результат:

((SELECT PRICE FROM PRODUCT WHERE NAME = 'Iron Ice Tea') * 5 + (SELECT PRICE FROM PRODUCT WHERE NAME = 'Clock Clock') * 3 + (SELECT PRICE FROM PRODUCT WHERE NAME = 'Shoe Telephone') * 3) 
+0

Большое вам спасибо за ваше решение. До сих пор я никогда не использовал 2D-массивы. – Simagdo

0

Не могли бы вы, пожалуйста, попробуйте ниже фрагмент кода -

 String[][] x = {{"Iron Ice Tea", "5"}, {"Clock Clock", "3"}, {"Shoe Telephone", "3"}}; 


     int lastIndex = x.length-1; 
     int currentIndex = 0 ; 

     String query = ""; 

     for (String[] product : x) { 

      if(currentIndex == lastIndex) 
       query +="((SELECT PRICE FROM PRODUCT WHERE NAME = '"+product[0]+"') * "+product[1]+")"; 
      else 
       query +="((SELECT PRICE FROM PRODUCT WHERE NAME = '"+product[0]+"') * "+product[1]+") + "; 
      currentIndex++; 
     } 


     System.out.println("query : "+query); 

продукта

x [0] = {«Iron Ice Tea», «5»} - это объект, поэтому он получит хеш-код объекта

x [1] = {"Clock Clock", "3"} - объект будет получить объектный код хэш

х [2] = { "Чистка телефона", "3"} - это объект будет получить объект хэш-код


первой итерации

продукта [0] = х [0] [0] = «Чай с железным льдом», продукт [1] = x [0] [1] = «5»

второй итерации

продукт [0] = х [1] [0] = "Часы Часы", продукт [1] = х [1] [1] = "3"

третьей итерации

продукт [0] = x [2] [0] = «Телефон для обуви», продукт [1] = x [2] [1] = "3"

+0

Это также работает – Simagdo

+0

@Simagdo Спасибо – Ravi