Cebolozakha Ответов: 3

Как исправить java.lang.indexoutofboundsexception : недопустимый диапазон массивов: от 1 до 1


Он жалуется с таблицей данных, он не может найти

Что я уже пробовал:

<pre>package Testcases;

import Base.Page;
import Listeners.ExtentReport;
import Pages.Actions.BursaryRegister;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

import java.io.IOException;

public class BursaryTest {

    ExtentReport extentReport = new ExtentReport();

    @DataProvider(name = "ReadData")
    public Object[][] ReadData() throws IOException {
        Utilities.DataProvider.ReadData();
        return Utilities.DataProvider.ReadData();
    }

    @Test(dataProvider = "ReadData")
    public void bursaryTest (String Name, String Surname, String Email, String ID, String CellNumber, String Test_Case_Description, String Expected_Results) {

        /*Defining Test Case Scenario*/
        extentReport.start(Test_Case_Description);

        Page.initConfiguration();

        /*Calling the object to access everything*/

        try {
            BursaryRegister bursaryLogin = new BursaryRegister();
            bursaryLogin.login(Name, Surname,Email,ID,CellNumber);
        } catch (Exception e) {
            extentReport.failure("Failed To Login");
            throw new AssertionError("Failed To Login");
        }

        extentReport.success("Logged in successfully ");
        Page.quitBrowser();
    }
}






package Utilities;

import Base.Constants;
import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;
import java.io.IOException;

public class DataProvider {

    public static XSSFWorkbook workbook;
    public static XSSFSheet worksheet;
    public static DataFormatter formatter = new DataFormatter();
    public String Res;
    WriteExcelData.Write obj1 = new WriteExcelData.Write();
    public int DataSet = -1;
    String ColName = "Pass/Fail";
    int col_num;


    @org.testng.annotations.DataProvider
    public static Object[][] ReadData() throws IOException {
        FileInputStream fileInputStream = new FileInputStream(Constants.excelPath); //Excel sheet file location get mentioned here
        workbook = new XSSFWorkbook(fileInputStream); //get my workbook
        worksheet = workbook.getSheet(Constants.DATA_SHEET);// get my sheet from workbook
        XSSFRow Row = worksheet.getRow(0);     //get my Row which start fro
        // m 0

        int RowNum = worksheet.getPhysicalNumberOfRows();// count my number of Rows
        int ColNum = Row.getLastCellNum(); // get last ColNum

        Object Data[][] = new Object[RowNum-1][ColNum]; // pass my  count data in array,
        System.out.println("Number of rows" +RowNum);
        for (int i = Constants.start; i <=Constants.end; i++) //Loop work for Rows,


            try {

                {
                    XSSFRow row = worksheet.getRow(i+1);//remember to change this back to 1

                    for (int j = 0; j < ColNum-1; j++) //Loop work for colNum
                    {
                        if (row == null)
                            Data[i][j] = "";
                        else {
                            XSSFCell cell = row.getCell(j);
                            if (cell == null)
                                Data[i][j] = ""; //if it get Null value it pass no data
                            else {
                                String value = formatter.formatCellValue(cell);
                                Data[i][j] = value; //This formatter get my all values as string i.e integer, float all type data value
                            }

                        }
                    }
                }


            } catch (Exception e) {
                e.printStackTrace();
            }
        return Data;
    }
}

Patrice T

Полное сообщение об ошибке также сообщает вам положение ошибки.
Это помогает найти то, что неправильно.

Richard MacCutchan

В какой строке, каков полный текст сообщения об ошибке? Пожалуйста, предоставьте надлежащую информацию о вашей проблеме.

3 Ответов

Рейтинг:
2

Patrice T

Цитата:
Как исправить java.lang.indexoutofboundsexception : недопустимый диапазон массивов: от 1 до 1

Полное сообщение об ошибке также сообщает вам положение ошибки.
Это помогает найти то, что неправильно. Мы не можем дать вам конкретную помощь, так как не можем знать, что не так.
Все, что мы можем сказать, это то, что где-то в коде вы пытаетесь получить доступ к элементу массива, который не существует.
Совет: используйте отладчик, чтобы следить за вашим кодом во время его выполнения и проверять переменную в положении ошибки.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html[^]
https://www.jetbrains.com/idea/help/debugging-your-first-java-application.html[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
1

OriginalGriff

Ошибка довольно явная:

indexoutofboundsexception : invalid array range: 1 to 1
Итак, где-то в этом коде вы используете массив, содержащий один элемент, и пытаетесь получить к нему доступ, используя индекс массива 1.
Поскольку массив содержит один элемент, единственным допустимым индексом массива является ноль.

Мы не можем исправить это для вас - у нас нет никакого доступа к вашим данным!
Так что все будет зависеть от тебя.
К счастью, у вас есть инструмент, который поможет вам выяснить, что происходит: отладчик. Как вы его используете, зависит от вашей системы компилятора, но быстрый поиск в Google имени вашей IDE и "отладчика" должен дать вам необходимую информацию.

Поместите точку останова в первую строку функции и запустите код через отладчик. Затем посмотрите на свой код и на свои данные и определите, что должно произойти вручную. Затем по одному шагу в каждой строке проверяйте, что то, что вы ожидали, произойдет именно так, как и произошло. Когда это не так, тогда у вас есть проблема, и вы можете вернуться назад (или запустить ее снова и посмотреть более внимательно), чтобы выяснить, почему.

Извините, но мы не можем сделать это за вас - пришло время вам освоить новый (и очень, очень полезный) навык: отладку!


Рейтинг:
1

Sandeep Mewara

Добавляя к ответу ОГА. Вы получаете доступ к индексу, которого там нет - на основе ошибки, второго элемента, когда в массиве есть только один элемент.

Ссылка: IndexOutOfBoundsException (Java Platform SE 7 )[^]

Цитата:
Брошенный, чтобы указать, что индекс некоторого вида (например, к массиву, к строке или к вектору) находится вне диапазона.


Теперь, сохраняя вышеизложенное в контексте, чтобы перебирать строки данных на листе, вы используете некоторые Constants.start и Constants.end но как раз перед этим вы действительно получили количество строк в рабочей книге. Убедитесь, что индексы находятся в диапазоне. Всегда проверяйте размер вашего списка или длину массива, прежде чем иметь логику доступа к ним.


Для обучения отладке, если это поможет:
jdb - отладчик Java[^]
Отладка среды разработки Eclipse IDE для разработчиков Java | The Eclipse Foundation[^]