Just nu i M3-nätverket
Gå till innehåll

ArrayIndexOutOfBoundsException??


kabelnisse

Rekommendera Poster

Hej! när jag kör programmet så får ja hela tiden det här meddelandet,

har försökt kolla i docs men kan inte komma på felet.

kan nån hjälpa mig !!!

 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException??

 

Länk till kommentar
Dela på andra webbplatser

-Patrik Johansson-

Du försöker komma åt ett värde/objekt som ligger utanför en arrays storlek. Säg att du har en array som har tre värden och du försöker att komma åt index nummer fyra, som inte finns, då¨får du detta fel.

 

//Patrik J

"Insanity: doing the same thing over and over again and expecting different results."
- citat av Albert Einstein

 

Länk till kommentar
Dela på andra webbplatser

Som felmeddelandet säger... Du har en array där du försöker komma åt ett index som ligger utanför giltiga värden..

 

T.ex. att du har fyra element i en array, och försöker komma åt det femte. Antar att java startar sina arrayer med index 0... Då är giltiga index 0-3, men du försöker komma åt index 4. Det vanligaste är nog att man har en for-loop, där man stegar från 0 till antal, istället för det korrekta 0 till antal-1.

 

Ciao,

Anders

 

 

Länk till kommentar
Dela på andra webbplatser

har försökt kolla i docs men kan inte komma på felet.

Du har ju redan fått svar men får man föreslå att du byter "docs"?

 

I den riktiga dokumentationen har det alltid stått så här som första mening på ovanstående exception:

"Thrown to indicate that an array has been accessed with an illegal index. The index is either negative or greater than or equal to the size of the array."

( http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ArrayIndexOutOfBoundsException.html )

 

 

Länk till kommentar
Dela på andra webbplatser

// Nu har jag försökt ett tag men lyckas inte

//kompileringen går bra men int exec

// Exception in thread "main"java.lang.ArrayIndexOutOfBoundsException??

 

//hjälp!

 

public class FileCopy {

 

public static void main(String[] args) {

 

try {

 

File inFile = new File(args[0]);

 

File outFile = new File(args[1]);

 

FileInputStream inStream = new FileInputStream(inFile);

 

FileOutputStream outStream = new FileOutputStream(outFile);

 

System.out.println("Kopierar " + args[0] + " till "

 

+ args[1] + "!");

 

int i;

while ((i = inStream.read()) != -1) {

 

 

 

outStream.write(i);

 

}

 

inStream.close();

 

outStream.close();

 

} catch (IOException e) {

 

System.out.println("Användning: java FileCopy infil utfil");

 

}

 

}

 

}

 

Länk till kommentar
Dela på andra webbplatser

Har du anget filerna för args[0] och args[1]?

 

När du kör filen från dos-promten måste du ju ange vilken fil som ska kopieras...

 

Exempelvis, om du har FileCopy och en textfil som heter TextFil1.txt liggandes direkt under C:\ så kan du skriva:

 

C:\>java FileCopy TextFil1.txt Kopian.txt

 

/OZn

_______________________________________________________

Microchips - De små potatisflingorna du äter allra sist i chipspåsen

 

[inlägget ändrat 2004-07-13 01:22:38 av OZn]

Länk till kommentar
Dela på andra webbplatser

Rent generellt så skulle det ju inte skada om du talar om vilken rad som kastar undantaget. I det här fallet använder du emellertid bara en array så det borde vara som OZn säger.

 

Har du skrivit koden själv eller kom den med i en skoluppgift? I det senare fallet känns det som om någon skulle ha berättat hur man ska använda programmet (även om det står längst ner).

 

Länk till kommentar
Dela på andra webbplatser

} catch (IOException e) {

 

System.out.println("Användning: java FileCopy infil utfil");

 

}

 

Om du ändrar det till

 

 } catch (Exception e) {

System.out.println("Användning: java FileCopy infil utfil");

}

 

tror jag programmet gör så som det är tänkt.

 

ArrayIndexOutOfBoundsException är inte en underklass till IOException, därför fångas det inte.

 

Kolla på

 

http://java.sun.com/j2se/1.4.2/docs/api/java/lang/ArrayIndexOutOfBoundsException.html

[inlägget ändrat 2004-07-13 09:44:35 av lizardKng (pa9876)]

Länk till kommentar
Dela på andra webbplatser

Svarar igen, naturligtvis ska man göra något liknande detta istället:

 

(Borde inte

...

bibehålla indenteringen?)

 

public class FileCopy {
 public static void main(String[] args) {
   if(args.length<2) {
     System.out.println("Användning: java FileCopy infil utfil");
     return(-1);
   }
   try {
     File inFile = new File(args[0]);
     File outFile = new File(args[1]);
     FileInputStream inStream = new FileInputStream(inFile);
     FileOutputStream outStream = new FileOutputStream(outFile);
     System.out.println("Kopierar " + args[0] + " till "
         + args[1] + "!");
     int i;
     while ((i = inStream.read()) != -1) {
       outStream.write(i);
     }
     inStream.close();
     outStream.close();
   } catch (Exception e) {
     e.printStackTrace();
   }
 }
}

 

[inlägget ändrat 2004-07-13 13:00:56 av lizardKng (pa9876)]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...