2017-03-06 4 views
0

Ich habe verschiedene Möglichkeiten zum Entfernen des Index außerhalb des Bound-Fehlers versucht, indem Sie die oberen Grenzen des Arrays ändern. Der Fehler bleibt jedoch bestehen. Wo gehe ich falsch?Wie entferne ich den Index-Fehler in meinem Programm?

Screenshot of my excel sheet

Mein Programm liest Werte (alle Zeilen) in der ersten Spalte der Excel-Blatt und findet den Maximalwert. Dann werden basierend auf dem Maximalwert Kriterien formuliert und die Werte werden als Niedrig, Mittel, Hoch klassifiziert und in ein neues Excel-Blatt zurückgeschrieben.

import java.io.FileInputStream; 
import java.io.IOException; 
import jxl.Cell; 
import jxl.Sheet; 
import jxl.Workbook; 
import jxl.read.biff.BiffException; 
import java.io.*; 
import java.util.*; 
import jxl.write.WritableSheet; 
import jxl.write.WritableWorkbook; 
import jxl.write.Label; 
import jxl.write.WriteException; 

public class Bus3{ 

List<String> numbusarray = new ArrayList<String>(); 
List<String> numcommutersarray = new ArrayList<String>(); 
List<String> numcommercialarray = new ArrayList<String>(); 
    static WritableWorkbook workbook; 
     static WritableSheet wSheet; 


public void readExcel() throws BiffException, IOException, WriteException//method to read  contents form excel 
{ 
    String FilePath = "Bus1.xls"; 
    Scanner sc = new Scanner(System.in); 
    int max=0; 

    FileInputStream fs = new FileInputStream(FilePath); 
    Workbook wb = Workbook.getWorkbook(fs); 
    Sheet sh = wb.getSheet("Bus1");// TO get the access to the sheet 
    int totalNoOfRows = sh.getRows();// To get the number of rows present in sheet 
    int totalNoOfCols = sh.getColumns();// To get the number of columns present in sheet 
    System.out.println(totalNoOfRows); 
    //adding excel contents from every column to arraylist 
    for (int row = 1; row <totalNoOfRows; row++) 
    { 
     numbusarray.add(sh.getCell(2, row).getContents()); 
    } 


    for (int row = 1; row <totalNoOfRows; row++) 
    { 
     numcommutersarray.add(sh.getCell(3, row).getContents()); 
    } 

    for (int row = 1; row <totalNoOfRows; row++) 
    { 
     numcommercialarray.add(sh.getCell(4, row).getContents()); 
    } 
    //to find maximum of numbusarray 
    max=Integer.parseInt(numbusarray.get(0)); 
    for (int row = 1; row < totalNoOfRows-1; row++) 
    { 
       if(!(numbusarray.get(row)).isEmpty()) 
       { 
       int intNumber=Integer.parseInt(numbusarray.get(row)); 
       if(intNumber>max) 
       { 
       max=intNumber; 
       //System.out.println(max); 
       } 
       } 


    } 
    System.out.println(max); 
    WritableWorkbook workbook = Workbook.createWorkbook(new File("sampletestfile.xls")); 
    WritableSheet wSheet = workbook.getSheet(0); 
    int increment=max/3; 
    int a=increment; 
    int b=a+increment; 
    int c=b+increment; 
    for (int row = 0; row < totalNoOfRows-1; row++) 
    { 
       if(!(numbusarray.get(row)).isEmpty()) 
       { 
       int compare=Integer.parseInt(numbusarray.get(row)); 
       if(compare<=a) 
       {Label label= new Label(0, row, "Low");//column,row,strngdata 
       wSheet.addCell(label);} 
       else if((compare>a)&&(compare<=b)) 
       {Label label= new Label(0, row, "Medium");//column,row,strngdata 
       wSheet.addCell(label);} 
       else 
       {Label label= new Label(0, row, "High");//column,row,strngdata 
       wSheet.addCell(label);} 
       } 
    }    
/*Iterator itr=numbusarray.iterator(); //to print arraylist demo 
    while(itr.hasNext()){ 
     System.out.println(itr.next()); 
    }*/ 
    }//end of method to read contents from excel 
    //to close file 
    public static void closeFile() 
    { 
     try { 
      // Closing the writable work book 
      workbook.write(); 
      workbook.close(); 

      // Closing the original work book 
     } catch (Exception e) 

     { 
      e.printStackTrace(); 
     } 
    } 


    public static void main(String args[]) throws BiffException, IOException, WriteException //main class 
    { 
     Bus3 DT = new Bus3(); 
     DT.readExcel(); 
     Bus3.closeFile(); 
    }//end of main class 

} 
+0

Debug es, Ansonsten poste deine Stack-Trace –

+0

Startzeile mit 0. Beginne nicht bei 1. All diese for-Schleifen, bei denen du i = 1 initialisierst, machen sie i = 0. Dann probiere –

+0

'row Maverick

Antwort

1

Es ist, weil Ihr sh Sheet.class Objekt keine Zellen mit Spalte = 4. Dies sollte es beheben:

for (int row = 1; row < totalNoOfRows; row++) { 
     numbusarray.add(sh.getCell(1, row).getContents()); 
    } 

    for (int row = 1; row < totalNoOfRows; row++) { 
     numcommutersarray.add(sh.getCell(2, row).getContents()); 
    } 

    for (int row = 1; row < totalNoOfRows; row++) { 
     numcommercialarray.add(sh.getCell(3, row).getContents()); 
    } 

Letzte Änderung:

for (int row = 1; row < totalNoOfRows; row++) { 
     numbusarray.add(sh.getCell(1, row).getContents()); 
    } 

    for (int row = 1; row < totalNoOfRows; row++) { 
     numcommutersarray.add(sh.getCell(2, row).getContents()); 

    } 

    for (int row = 1; row < totalNoOfRows; row++) { 
     numcommercialarray.add(sh.getCell(3, row).getContents()); 
    } 
    // to find maximum of numbusarray 
    max = 0; 
    for (int row = 1; row < totalNoOfRows; row++) { 
     if (!(numbusarray.get(row - 1)).isEmpty()) { 
      int intNumber = Integer.parseInt(numbusarray.get(row - 1)); 
      if (intNumber > max) { 
       max = intNumber; 
       System.out.println("max: " + max); 
      } 
     } 

    } 
    System.out.println(max); 
    workbook = Workbook.createWorkbook(new File("sampletestfile.xls")); 
    WritableSheet wSheet = workbook.createSheet("name", 0); 
+0

gegeben habe Ich habe zusätzliche zwei Reihen voraus. Die Anzahl der Busse ist meine 3. Spalte und ich denke, der Index 2, den ich angegeben habe, ist richtig. @Rinat – Zac

+0

Auch sollte geändert werden: max = 0; \t \t für (int row = 1; Zeile Rinat

+0

Und das: workbook = Workbook.createWorkbook (neue Datei ("samplestestfile.xls")); \t \t WritableSheet wSheet = workbook.createSheet ("Name", 0); – Rinat

1

Es sieht nicht wie ein sehr komplexes Problem aus. Index außerhalb der Grenzen bedeutet, dass Sie versuchen, auf eine Position im Array zuzugreifen, die nicht existiert. Beobachten Sie Ihre numbusarray Variable, wahrscheinlich wird row auf einen ungültigen Index gesetzt.

+0

Exception in thread "main" java.lang.IndexOutOfBoundsException wird: Index: 0, Größe: bei java.util.ArrayList.rangeCheck (ArrayList.java:653) bei java.util.Array List.get (ArrayList.java:429) bei jxl.write.biff.WritableWorkbookImpl.getSheet (WritableWorkbookImpl.jav a: 399) bei Bus3.readExcel (Bus3.java:69) bei Bus3.main (BUS3. java: 115) – Zac

+0

Der obige Fehler wird angezeigt. Numbusarray-Array enthält 14 Begriffe. Also 0-13 ist das Limit, das ich für Numbusarray – Zac

Verwandte Themen