Problem z algorytmem w kodzie na dodawanie dwóch tablic

0

Cześć,
poniżej podałem kod, ale tutaj napiszę w czym mam problem :/ Chodzi o algorytm, który porównuje wielkości dwóch podanych tablic - jeżeli tablica a jest większa od tablicy b, to powiększamy tablicę b do wielkości a i przypisujemy dodanym argumentom wartość 0.
Jeżeli wpisuję wartość tablicy pierwszej 2, a drugiej 3 to wyskakuje mi taki błąd:

Podaj wartosc pierwszej tablicy jednowymiarowej (1-10)
3
Podaj wartosc drugiej tablicy jednowymiarowej (1-10)
2
Wynik dodawania tablic
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
	at defalut.Wartosci.lWartosci(MyFrame.java:45)
	at defalut.MyFrame.main(MyFrame.java:10)

Oto kod źródłowy:

package defalut;

import java.util.Random;
import java.util.Scanner;

public  class MyFrame{
	public static void main(String[] args) {
		Wartosci licz =  new Wartosci();
		
		licz.lWartosci();
		
	}
}

class Wartosci{
	void lWartosci() {
		
		Tablica1 pW = new Tablica1();
		int w = pW.pWielkosc();
		int[] tablica = new int[w];
		
		Tablica2 pW2 = new Tablica2();
		int w2 = pW2.pWielkosc2();
		int[] tablica2 = new int[w2];
		
		Random r = new Random();
		for(int i = 0; i < w; i++) {
			tablica[i] = r.nextInt(10)+1;
		}
		for(int i = 0; i < w2; i++) {
			tablica2[i] = r.nextInt(10)+1;
		}
		
		System.out.println("Wynik dodawania tablic");
		int wieksza;
		if(w2 >= w) {
			wieksza = w2; // GDZIEŚ OD TEJ CZĘŚCI WYSTĘPUJE BŁĄD MOIM ZDANIEM
			for(int i = w; i < w2; i++ ) {
				tablica[i] = 0;
				System.out.println(tablica[i]);
			}
		}else {
			wieksza = w;
			for(int i = w2; i < w; i++ ) {
				tablica2[i] = 0;
				System.out.println(tablica2[i]);
			}
		}
		for(int i = 0; i < wieksza; i++) {
			System.out.println(tablica[i]);
			System.out.println(tablica2[i]);
			System.out.println(tablica[i] + tablica2[i] + " = Suma tablic o wspolrzednej: " +(i+1));
			
		}
		
	}
	
}

class Tablica1{
	int pWielkosc(){
		System.out.println("Podaj wartosc pierwszej tablicy jednowymiarowej (1-10)");
		Scanner s1 = new Scanner(System.in);
		int x;
		do {
			x = s1.nextInt();
		}while(x < 0 || x > 10);
		return x;
	}
}

class Tablica2{
	int pWielkosc2(){
		System.out.println("Podaj wartosc drugiej tablicy jednowymiarowej (1-10)");
		Scanner s1 = new Scanner(System.in);
		int x;
		do {
			x = s1.nextInt();
		}while(x < 0 || x > 10);
		return x;
	}
}
1

Przecież to co robisz nie ma sensu. NIGDZIE nie zmieniasz rozmiaru tablic! Musisz utworzyć NOWE TABLICE które pomieszczą dodatkowe wartości! Zastanów się trochę.

        if(w2 >= w) {
            wieksza = w2;
            for(int i = w; i < w2; i++ ) {
                tablica[i] = 0;
                System.out.println(tablica[i]);
            }
        }

Przecież tablica ma tylko w indeksów, a ty próbujesz przypisywać 0 na indeksy poza zakresem.

0

Rozumiem, że powinienem zmienić algorytm, tak aby przed ustawieniem wielkości tablic sprawdzało, która jest większa, a później przy dopisywaniu wartości do tej mniejszej dodawało zera tam, gdzie została "powiększona".
W sensie, wpisujemy wartość tablicy pierwszej "3", drugiej "4" - teraz program sprawdza, która jest większa, tworzy dopiero realnie te tablice, które są równe - i podczas dodawania wartości do tej tablicy powiększonej dodaje wartości 0?

Przepraszam za błędy, nieprofesjonalny język, zaczynam dopiero, tworzę jakieś proste programy i dużo kombinuję.

0

Zmieniłem trochę ten kod, jednak jeżeli podaję teraz pierwsza tablice i jest ona większa od drugiej, to wychodza normalne wyniki dodawania tablic, a jeżeli pierwsza jest mniejsza od drugiej, to wynikami jest liczba 0.

package defalut;

import java.util.Random;
import java.util.Scanner;

public  class MyFrame{
	public static void main(String[] args) {
		Wartosci licz =  new Wartosci();
		
		licz.lWartosci();
		
	}
}

class Wartosci{
	void lWartosci() {
		Tablica pW = new Tablica();
		Tablica2 pW2 = new Tablica2();
		Random r = new Random();
		
		int w = pW.pWielkosc();
		int w2 = pW2.pWielkosc2();
		int wieksza;
		
		if(w > w2) {
			int[] tablica1 = new int[w];
			int[] tablica2 =  new int[w];
			
			for(int i = 0; i < w; i++) {
				tablica1[i] = r.nextInt(10)+1;
			}
			for(int i = 0; i < w; i++) {
				if( i < w2) {
					tablica2[i] = r.nextInt(10)+1;
				}
				if(i > w2) {
					tablica2[i] = 0;
				}
			}
			wieksza = w;
			System.out.println("Dodawanie tablic");
			for(int i = 0; i < wieksza; i++) {
				System.out.println(i+" suma tablic jest rowna " + (tablica1[i] +tablica2[i]));
			}
		}
		if(w2 > w) {
			int[] tablica1 = new int[w2];
			int[] tablica2 =  new int[w2];
			
			for(int i = 0; i < w; i++) {
				tablica2[i] = r.nextInt(10)+1;
			}
			for(int i = 0; i < w; i++) {
				if( i < w) {
					tablica1[i] = r.nextInt(10)+1;
				}
				if(i > w) {
					tablica1[i] = 0;
				}
			}
			wieksza = w2;
			System.out.println("Dodawanie tablic");
			for(int i = 0; i < wieksza; i++) {
				System.out.println(i+" suma tablic jest rowna " + (tablica1[i] +tablica2[i]));
			}
		}else if(w == w2){
			int[] tablica1 = new int[w];
			int[] tablica2 =  new int[w2];
			
			for(int i = 0; i < w; i++) {
				tablica1[i] = r.nextInt(10)+1;
			}
			for(int i = 0; i < w2; i++) {
				tablica2[i] = r.nextInt(10)+1;
			}
			wieksza = w;
			System.out.println("Dodawanie tablic");
			for(int i = 0; i < wieksza; i++) {
				System.out.println((i+1)+" suma tablic jest rowna " + (tablica1[i] +tablica2[i]));
			}
		}
		
	}
}

class Tablica{
	int pWielkosc(){
		
		int tab = 1;
	
		System.out.println("Podaj wielkosc tablicy pierwszej jednowymiarowej (1-10)");
		Scanner s1 = new Scanner(System.in);
		int x;
		do {
			x = s1.nextInt();
		}while(x < 0 || x > 10);
		
		return x;
	}
}
class Tablica2{
	int pWielkosc2(){
		
		System.out.println("Podaj wielkosc tablicy drugiej jednowymiarowej (1-10)");
		Scanner s1 = new Scanner(System.in);
		int x;
		do {
			x = s1.nextInt();
		}while(x < 0 || x > 10);
		
		return x;
	}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1