Arrayn skrivs ut korrekt med korrekt antal element men krashar när den är klar. Java
Varför krashar den, svaret i konsollen är
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 22 out of bounds for length 22
at className/inupp6.NewMenu.print(NewMenu.java:12)
at className/inupp6.NewMenu.menu(NewMenu.java:41)
at className/inupp6.NewMenu.main(NewMenu.java:85)
Det konstiga är att hela arrayn skrivs ut som den ska med ett ökat element tillagdt. (Jag tog bort fel medelandet från hur arrayn kommer ut i konsolen.
Några ideer om hur jag fixar detta?
1
1000 | Pris: 345kr | antal i lager: 2
1001 | Pris: 550kr | antal i lager: 3
1002 | Pris: 826kr | antal i lager: 9
1003 | Pris: 297kr | antal i lager: 7
1004 | Pris: 835kr | antal i lager: 6
1005 | Pris: 806kr | antal i lager: 6
1006 | Pris: 321kr | antal i lager: 7
1007 | Pris: 902kr | antal i lager: 2
1008 | Pris: 167kr | antal i lager: 9
1009 | Pris: 735kr | antal i lager: 7
New Array1
1000 | Pris: 345kr | antal i lager: 2
1001 | Pris: 550kr | antal i lager: 3
1002 | Pris: 826kr | antal i lager: 9
1003 | Pris: 297kr | antal i lager: 7
1004 | Pris: 835kr | antal i lager: 6
1005 | Pris: 806kr | antal i lager: 6
1006 | Pris: 321kr | antal i lager: 7
1007 | Pris: 902kr | antal i lager: 2
1008 | Pris: 167kr | antal i lager: 9
1009 | Pris: 735kr | antal i lager: 7
1010 | Pris: 682kr | antal i lager: 4
import java.util.Scanner;
public class NewMenu {
public static int[] print(int[] a) {
int length = a.length;
int[] printArr = new int[length+2];
for(int i = 0; i < printArr.length; i++) {
int j = i+11;
System.out.println((1000 + i) + " | Pris: " + a[i] + "kr | antal i lager: " + a[j]);
}
return a;
}
public static int input() {
int output = sc.nextInt();
return output;
}
/*
* Mer kompakt men både arrayn är i samma loop.
*/
public static int menu(int option) {
int startSize = 10;
int[] arrayPrice = new int[startSize];
int[] arrayNrOf = new int[startSize];
for (int i = 0; i < startSize; i++) {
arrayPrice[i] = (int) (Math.random() * 1000) + 100;
arrayNrOf[i] = (int) (Math.random() * 10) + 1;
System.out.println((1000 + i) + " | Pris: " + arrayPrice[i] + "kr | antal i lager: " + arrayNrOf[i]);
}
System.out.println(" ");
System.out.print("New Array");
while(true) { //Fungerar inte eftersom programmet krasher och kan därför inte startas om, jag vill kunna fortsätta växa listan mer än 1 gång har dock inte haft möjligheten att testa om det går.
if(option == 1) {
int[] updatedList = new int[startSize*2];
updatedList = insertArticle(arrayPrice, arrayNrOf);
print(updatedList);
if(option == 0) {
break;
}
}
}
return option;
}
public static int[] insertArticle(int[] arrayA, int[] arrayB) {
int increaseWith = input(), addPrice = (int) (Math.random()*1000)+100, addNrOf = (int) (Math.random()*10)+1;
int arrALen = arrayA.length;
int arrBLen = arrayB.length;
int[] arrA = new int[arrALen+increaseWith];
for(int i = 0; i < arrALen; i++) {
arrA[i] = arrayA[i];
}
arrA[arrA.length - increaseWith] = addPrice;
arrALen = arrALen+increaseWith;
int[] arrB = new int[arrBLen+increaseWith];
for(int i = 0; i < arrBLen; i++) {
arrB[i] = arrayB[i];
}
arrB[arrB.length - increaseWith] = addNrOf;
arrBLen = arrBLen+increaseWith;
int[] updatedArray = new int[arrALen+arrBLen];
System.arraycopy(arrA, 0, updatedArray, 0, arrALen);
System.arraycopy(arrB, 0, updatedArray, arrALen, arrBLen);
return updatedArray;
}
public static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
// TODO Auto-generated method stub
menu(input());
}
}