Исключение IndexOutOfBoundsException для автоматизации

#java #eclipse #arraylist #indexoutofboundsexception

#java #eclipse #список массивов #исключение indexoutofboundsexception

Вопрос:

Я пытаюсь автоматизировать приложение. Для этого я использую хэш-карту для набора данных Excel и создал свои методы для выполнения действий с этими данными.

Файл класса для выполнения показан ниже

 @Test
    public void testLAP_Creamix() throws Exception {
        try {
            launchMainApplication();

            Lapeyre_frMain Lapeyre_frMainPage = new Lapeyre_frMain(tool, test, user, application);

            HashMap<String, ArrayList<String>> win = CreamixWindowsDataset.main();
            SortedSet<String> keys = new TreeSet<>(win.keySet());

            for (String i : keys) {
                System.out.println("########### Test = "   win.get(i).get(0)   " ###########");
                Lapeyre_frMainPage.EnterTaille(win.get(i).get(1));
                Lapeyre_frMainPage.SelectCONFIGURATION(win.get(i).get(2));
                Lapeyre_frMainPage.SelectPLANVASQUE(win.get(i).get(3));
                Lapeyre_frMainPage.SelectCOULEUR(win.get(i).get(4));
                Lapeyre_frMainPage.SelectPOIGNEES(win.get(i).get(5));
                Lapeyre_frMainPage.SelectTYPE_DE_MEUBLE(win.get(i).get(6));
                Lapeyre_frMainPage.VerifyPanierPrice(win.get(i).get(7));
                Lapeyre_frMainPage.VerifyECO_PARTPrice(win.get(i).get(8));
                Lapeyre_frMainPage.ClickCREAMIXReinit();
                System.out.println("########### Test End ##############");
            }

            test.setResult("pass");
        } catch (AlreadyRunException e) {
        } catch (Exception e) {
            verificationErrors.append(e.getMessage());
            throw e;
        }

    }
 

Код хэш-карты :

 public static HashMap<String, ArrayList<String>> main() throws IOException {

        final String DatasetSheet = "src/test/resources/CreamixDataSet.xlsx";
        final String DatasetTab = "Creamix";

        Object[][] ab = DataLoader.ReadMyExcelData(DatasetSheet, DatasetTab);

        int rowcount = DataLoader.myrowCount(DatasetSheet, DatasetTab);
        int colcount = DataLoader.mycolCount(DatasetSheet, DatasetTab);

        HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();

        // i = 2 to avoid column names
        for (int i = 2; i < rowcount;) {
            ArrayList<String> mycolvalueslist = new ArrayList<String>();
            for (int j = 0; j < colcount;) {
                mycolvalueslist.add(ab[i][j].toString());
                j  ;
            }
            map.put(ab[i][0].toString(), mycolvalueslist);
            i  ;
        }

        return map;
    }
 

Запрос: я смог запустить этот код несколько дней назад, но теперь, после добавления нескольких новых столбцов, он выдает указанную ниже ошибку.
Индекс IndexOutOfBoundsException 7 выходит за пределы длины 7

Я не могу отследить проблему здесь, что мне следует искать? пожалуйста, помогите!

Комментарии:

1. пожалуйста, добавьте всю трассировку стека

2. ну, я подозреваю, что у вас colcount всего 7, но вы пытаетесь получить доступ win.get(i).get(7) к и win.get(i).get(8) .

3. Примечание: чрезвычайно однообразно размещать операторы increment внутри тела — почему бы не оставить их в том месте for(init;condition;increment) , где они принадлежат?

Ответ №1:

         for (String i : keys) {
            arr = win.get(i);//debug here,watch it size
            Lapeyre_frMainPage.EnterTaille(arr.get(1));
            
            
        }