Wątek przeniesiony 2017-06-10 10:06 z Java przez bogdans.

Tablice wielowymiarowe

0

Cześć,
Dla większości z Was problem pewnie trywialny. Chodzi o utworzenie w Javie tablicy dwuwymiarowej z róznymi typami zmiennych. Tzn. bym mógł tam wpisać np. Janek lat 24, Marta lat 22 itd. Czyli by była zmienna String oraz Double. Kod:

String[][] tablica2D = new String[10][10];

daje mi tylko dwie zmienne typu String. Natomiast kod:

String[]Double[] tablica2D = new String[10]Double[10];

Wyrzuca błędy. Jak to zrobić? :(

1

Do tego celu powinno się utworzyć klasę przechowującą dane osoby i przechowywać te klasy w tablicy.

0
mad_penguin napisał(a):

Do tego celu powinno się utworzyć klasę przechowującą dane osoby i przechowywać te klasy w tablicy.

Dokładnie!

I wtedy możesz zapisać


int n = 10;
Person[] persons = new Person[n];

O co Ty pytasz to możesz zrobić to używając pojęcia dziedziczenia i polimorfizmu:


		Object[][] persons = new Object[10][2];
		persons[0][0] = "Jan";
		persons[0][1] = 34;
		persons[1][0] = "Ben";
		persons[1][1] = 33;

		for(int i = 0; i < 10;i++){
			System.out.printf(" Osoba o imieniu %s ma %d lat %n", persons[i][0], persons[i][1]);
		}

Ale nie polecam. Zresztą chyba widać dlaczego?

0

Ok to cofnąłem się do klas.
listing jest taki:

public class pracownicy {
public static void main(String[] args) {
	public class Pracownik {
		   String imie;
		   double wiek;
		}
		}
}

gdzieś muszę mieć błąd bo wyskakuje mi komunikat:

xception in thread "main" java.lang.Error: Unresolved compilation problem:
	Illegal modifier for the local class Pracownik; only abstract or final is permitted
	at pracownicy.main(pracownicy.java:7)
0

Nie możesz mieć dwóch klas publicznych w jednym pliku.
Przeczytaj cokolwiek o podstawach Javy.

0
frankiejojo napisał(a):

Ok to cofnąłem się do klas.
listing jest taki:

public class pracownicy {
public static void main(String[] args) {
public class Pracownik {
String imie;
double wiek;
}
}
}
gdzieś muszę mieć błąd bo wyskakuje mi komunikat:
xception in thread "main" java.lang.Error: Unresolved compilation problem:
Illegal modifier for the local class Pracownik; only abstract or final is permitted

at pracownicy.main(pracownicy.java:7)

OK. To co próbujesz zrobić to wykorzystanie lokalnej klasy wewnętrznej, a ona nie może być deklarowana żadnym specyfikatorem.

Jeżeli chcesz żeby jakakolwiek klasa w Javie była publiczna, musisz ją mieć w osobnym pliku. Tak Java logicznie sobie to układa.

Jak usuniesz public z deklaracji klasy Pracownik skompiluje się. Ale nie wiem czy Tobie o to chodzi ;)

0

Tak naprawdę to usiłuję zrozumieć skrypt z książki Horstmanna Java Podstawy listing 4.2
Idzie to tak:

public class EmployeeTest {

	/**
	 * @param args
	 */
public static void main(String[] args) {
Employee[]Staff =new Employee[3];
Staff[0] = new Employee ("Jarosław Rybiński", 75000);
Staff[1] = new Employee ("Katarzyna Remiszewska", 50000);
Staff[2] = new Employee ("Krystyna Kuczyńska", 40000);
}
}

Potem jest pętla itd. zwiększenie wynagrodzenia o 5%
Na tworzeniu tej tablicy system się zawiesza.
Wpierw tworzona jest tablica nie jest napisane czy to String, czy Doble.
Przy wpisywaniu danych jeden fragment jest w cudzysłowie czyli pewnie String potem jest zwykła liczba czyli int albo double,
Sprawę można rozwiązać "olewając klasy", robiąc tabelę wielowymiarową w stringu i drugi element stringa zamienić na int - na okrągło też się da.
Jednak metoda podana przez autora jest prostsza - tyle, że nie chodzi:(
Wywaliłem się na 150 stronie książki i leże :(

0

Trochę trudno się to czyta ale spróbuję odpowiedzieć.

Więc tak.

Employee[]Staff =new Employee[3];

tutaj jest tworzona trzy elementowa tablica jednowymiarowa zawierająca referencje do obiektów klasy Employee.

Staff[0] = new Employee ("Jarosław Rybiński", 75000);
Staff[1] = new Employee ("Katarzyna Remiszewska", 50000);
Staff[2] = new Employee ("Krystyna Kuczyńska", 40000);

tutaj na miejscach 0,1,2 są ustawiane te referencje w tablicy poprzez stworzenie od razu obiektu typu Employee i przypisanie referencji do np. Staff[0] = new Employee( ... );

To referencje typu Employee są przechowywane w tej tablicy. I możesz się odwoływać do konkretnych "obiektów" w tablicy poprzez ich referencje podając w nawiasach kwadratowych pozycję

for( int i  = 0; i < Staff.length, i++){
  System.out.printf("Pan %s ma pensję %d %n", Staff[i].getName(), Staff[i].getSalary);
}

0
elslawko napisał(a):

Trochę trudno się to czyta ale spróbuję odpowiedzieć.

Więc tak.

Employee[]Staff =new Employee[3];

tutaj jest tworzona trzy elementowa tablica jednowymiarowa zawierająca referencje do obiektów klasy Employee.

Staff[0] = new Employee ("Jarosław Rybiński", 75000);
Staff[1] = new Employee ("Katarzyna Remiszewska", 50000);
Staff[2] = new Employee ("Krystyna Kuczyńska", 40000);

tutaj na miejscach 0,1,2 są ustawiane te referencje w tablicy poprzez stworzenie od razu obiektu typu Employee i przypisanie referencji do np. Staff[0] = new Employee( ... );

To referencje typu Employee są przechowywane w tej tablicy. I możesz się odwoływać do konkretnych "obiektów" w tablicy poprzez ich referencje podając w nawiasach kwadratowych pozycję

for( int i  = 0; i < Staff.length, i++){
  System.out.printf("Pan %s ma pensję %d %n", Staff[i].getName(), Staff[i].getSalary);
}

Dzięki

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