Java, zmatek v tridach a instanci atd.. – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Java, zmatek v tridach a instanci atd.. – Java – Fórum – Programujte.comJava, zmatek v tridach a instanci atd.. – Java – Fórum – Programujte.com

 

Manik
~ Anonymní uživatel
2 příspěvky
3. 5. 2009   #1
-
0
-

Ahoj,
mam dost zmatek v tech ruznych vychytavkach objektoveho programovani a momentalne jsem se v jednom projektu zabrzdil na jedne veci..

package maticeproject2009;


final public class Matrix {
private final int M; // number of rows
private final int N; // number of columns
private final double[][] data; // M-by-N array

// create M-by-N matrix of 0's
public Matrix(int M, int N) {
this.M = M;
this.N = N;
data = new double[M][N];
}

// create matrix based on 2d array
public Matrix(double[][] data) {
M = data.length;
N = data[0].length;
this.data = new double[M][N];
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
this.data[i][j] = data[i][j];
}

// copy constructor
private Matrix(Matrix A) { this(A.data); }

// print matrix to standard output
public void show() {
for (int i = 0; i < M; i++) {
for (int j = 0; j < N; j++)
System.out.printf("%9.4f ", data[i][j]);
System.out.println();
}
}

public Matrix gaussian() {
// create copies of the data
Matrix A = new Matrix(this);

// Gaussian elimination with partial pivoting
for (int i = 0; i < N; i++) {

// find pivot row and swap
int max = i;
for (int j = i + 1; j < N; j++)
if (Math.abs(A.data[j][i]) > Math.abs(A.data[max][i]))
max = j;
A.swap(i, max);

// pivot within A
for (int j = i + 1; j < N; j++) {
double m = A.data[j][i] / A.data[i][i];
for (int k = i+1; k < N; k++) {
A.data[j][k] -= A.data[i][k] * m;
}
A.data[j][i] = 0.0;
}
}
return A;
}

// swap rows i and j
private void swap(int i, int j) {
double[] temp = data[i];
data[i] = data[j];
data[j] = temp;
}

// test client
public static void main(String[] args) {
double[][] d = { { 8, -1, -2, 0 }, { -1, 7, -1, 10 }, { -2, -1, 9, 23} };
Matrix A = new Matrix(d);
A.show();
System.out.println();

A.gaussian();
System.out.println("Uprava na schodovy tvar:");
A.show();
}
}

Hazi mi to: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
takze tipuji, ze mam spatne inicializovaneou matici A v metode gaussian, jelikoz me to odkazuje na radek 47
if (Math.abs(A.data[j][i]) > Math.abs(A.data[max][i]))

Nahlásit jako SPAM
IP: 89.185.227.–
Payne
~ Anonymní uživatel
37 příspěvků
3. 5. 2009   #2
-
0
-

To nieje o objektovo orientovanom programovani, ale o tom ze nechapes algoritmu... Nejdem to teraz presne riesit ale zrejme si chcel spravit Gaussovu eliminacnu metodu...

Problem je v tom ze tam mas vela chyb, resp. casto menis indexy jeden za druhy a celkovo ten algoritmus nedava zmysel...

Nahlásit jako SPAM
IP: 85.135.198.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 1 host

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý