2016-02-06 3 views
-1

Я пытаюсь, чтобы моя программа сохранила мой один размерный массив в два раза, потому что у меня есть идентификаторы продуктов и их количество проданных единиц. Это говорит мне, что мой массив вне пределов моего цикла for. Я пробовал так много способов, но я не могу заставить мой единственный размерный массив перейти в многомерный массив. Я провел два дня, пытаясь разобраться во всем этом. Пожалуйста, помогите мне! И да, у меня есть правильный импорт, я просто не включаю их здесь.Вне границ массива в многомерном массиве

class ProductCalculator { 

    public static void main(String[] args) { 

    String csvFile = "/Users/garre_000/Desktop/COMP 182/Sales Data.csv"; 
    BufferedReader br = null; 
    String line = ""; 
    String cvsSplitBy = ","; 



    try { 

     br = new BufferedReader(new FileReader(csvFile)); 
     while ((line = br.readLine()) != null) { 

      String[] productSales = line.split(cvsSplitBy); 

      System.out.println(productSales[0] + " " + productSales[1]); 
      //System.out.println(productSales[0][0] + productSales[0][1]); 



      for (int i = 2; i <= productSales.length; i+=2) { 
       int x = Integer.parseInt(productSales[i]); 
       int z = Integer.parseInt(productSales[i++]); 

       int[][] multiProduct = new int[x][z]; 
       System.out.println(multiProduct[0][0]); 
      } 
     } 

    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     if (br != null) { 
      try { 
       br.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    System.out.println("Done"); 
    } 
} 
+0

Массив, скорее всего, НЕ структура данных, которую вы должны использовать здесь. Создайте класс для хранения показателей продаж (идентификатор продукта и проданного количества), а затем сохраните их на карте (или, скорее, MultiMap). –

+0

Вы действительно хотите увеличивать 'i' в' Integer.parseInt (productSales [i ++]); ', или вы просто имеете в виду' Integer.parseInt (productSales [i + 1]); '? Обычно не рекомендуется увеличивать переменную for loop внутри тела цикла. –

ответ

1
for (int i = 2; i <= productSales.length; i+=2) { 
    int x = Integer.parseInt(productSales[i]); 
    int z = Integer.parseInt(productSales[i++]); 

Вы должны быть в состоянии читать по крайней мере, два элемента из productSales в теле цикла здесь - однако, для текущего охранника контура, который будет работать тело вплоть до i == productSales.length, вы могли бы попробуйте прочитать:

productSales[productSales.length]  // 1 beyond end of array 
productSales[productSales.length + 1] // 2 beyond end of array 

Следовательно, вам необходимо охраннику петлю быть:

for (int i = 2; i < productSales.length - 1; i += 2) { 
0

Изменить условия for терминации Петля из

i <= productSales.length 

в

i < productSales.length 

Java массивы начинаются с нуля, так что последний показатель в length - 1; если индекс равен длине, вы получите ArrayIndexOutOfBoundsException.