Programming (1 Viewer)

Loppan

Senior Member
Jul 13, 2002
2,528
#1
Can someone who's good with inteface and datatypes help me?

I have problems with one method:

My interface:

public interface Add {

public int plus(Add r2);



}


The method:

public Add plus(Add r2) {

t = (this.getT() * r2.getN()) + ((this.getN()) * r2.getT());
n = (this.getN() * r2.getN());

Add tal = new Addimp(t,n);


return tal;

}

the problem is that it requires the datatype Add but it found an int.
 

Martin

Senior Member
Dec 31, 2000
56,859
#3
Addition of matrices seems rather straightforward... assuming matrices have array representation..

Code:
for (int length = 0; length < matrix1.length; length++) {
  for (int depth= 0; depth< matrix1[0].length; depth++) {
    resultmatrix[length][depth] = 
      matrix1[length][depth] + matrix2[length][depth];
  }
}
...obviously assuming the matrices have matching dimensions, otherwise you could handle the problem with an exception (ArrayIndexOutOfBoundsException).

I'm not sure I understand what you mean by whether they match however.. :undecide:

I'm glad you didn't ask about multiplication of matrices, that would be worse :D
 

Martin

Senior Member
Dec 31, 2000
56,859
#5
Hell, I wanted to excercise the mind, here's a class to add, subtract and multiply matrices :D

Code:
class matrix {

	public static void main(String[] args) {
		int[][] matrix1 = {{2,1},{1,3},{2,3},{4,2}};
		int[][] matrix2 = {{1,3,2,1}};
		int[][] matrix3 = {{-2,1},{-3,3},{2,-3},{14,2}};		
		
		addMatrices(matrix1, matrix3);
		subtractMatrices(matrix3, matrix1);
		multiplyMatrices(matrix1, matrix2);
	}
	
	public static void addMatrices(int[][] matrix1, int[][] matrix2) {
		
		int[][] resultmatrix = new int[matrix1.length][matrix1[0].length];
		
		try {
		
			for (int y = 0; y < matrix1[0].length; y++) {
	  		for (int x = 0; x < matrix1.length; x++) {
  	  		resultmatrix[x][y] = 
    	  		matrix1[x][y] + matrix2[x][y];
	  		}
			}
			
			printComment("A", "B", "+", matrix1, matrix2, resultmatrix);
			
		} catch (ArrayIndexOutOfBoundsException e) {
  		System.out.println("Error: Matrix dimensions don't match");
  	}
	}
	
	public static void subtractMatrices(int[][] matrix1, int[][] matrix2) {
		
		int[][] resultmatrix = new int[matrix1.length][matrix1[0].length];
		
		try {
		
			for (int y = 0; y < matrix1[0].length; y++) {
	  		for (int x = 0; x < matrix1.length; x++) {
  	  		resultmatrix[x][y] = 
    	  		matrix1[x][y] - matrix2[x][y];
	  		}
			}
			
			printComment("A", "B", "-", matrix1, matrix2, resultmatrix);
			
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("Error: Matrix dimensions don't match");
		}
	}	
	
	public static void multiplyMatrices(int[][] matrix1, int[][] matrix2) {
		
		int[][] resultmatrix = new int[matrix2.length][matrix1[0].length];

		try {
			for (int x = 0; x < resultmatrix.length; x++) {
				for (int y = 0; y < resultmatrix[0].length; y++) {
	  			for (int leftmatrix = 0; leftmatrix < matrix2[0].length; leftmatrix++) {
	  				resultmatrix[x][y] += matrix1[leftmatrix][y] * matrix2[x][leftmatrix];
	  			}
	  		}
			}		

		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("Error: Matrix dimensions don't match");
		}		
		printComment("A", "B", "*", matrix1, matrix2, resultmatrix);

	}
	
	public static void printMatrix(int[][] matrix) {
		for (int y = 0; y < matrix[0].length; y++) {
  		for (int x = 0; x < matrix.length; x++) {
    		System.out.print("[" + matrix[x][y] + "]");
  		}
  		System.out.println();
		}
		
			
	}
	
	public static void printComment(String namefirst, String namesecond, String operation, 
			int[][] first, int[][] second, int[][] result) {
		print(namefirst + "[" + first[0].length + "x" + first.length + "] " + ":");
		printMatrix(first);
		print("\n" + namesecond + "[" + second[0].length + "x" + second.length + "] " + ":");
		printMatrix(second);
		print("\n" + namefirst + "[" + first[0].length + "x" + first.length + "]" + " " + operation + " "
			+ namesecond + "[" + second[0].length + "x" + second.length + "]" 
			+ " = C" + "[" + result[0].length + "x" + result.length + "] ");
		printMatrix(result);
		print("\n\n");
	}
	
	public static void print(String output) {
		System.out.println(output);	
	}
	
}
Mayood, eat my dust :D
 

Martin

Senior Member
Dec 31, 2000
56,859
#6
++ [ originally posted by Loppan ] ++
Thanks :D

Now I just gotta figure out how I can create a copy of them and getValue at a certian position?
Copy the matrix? In other words copy one array to another?

Code:
System.arraycopy(array1, 0, array2, 0, array1.length);

public int getValue(int[][] matrix, int x, int y) {
  return int[y][x];
}
:)
 
OP
OP
Loppan

Loppan

Senior Member
Jul 13, 2002
2,528
#7
The problem is that I'm working with a interface. I have problems with these methods:

public Matrix getValueAt(int x, int y) {
return (x+ +y);
}


public Matrix Addera(int m1, int m2) {

Matriximp resultmatrix =
new Matriximp (matrix.length,matrix[0].length);

for (int y = 0; y < matrix[0].length; y++) {

for (int x = 0; x < matrix[0].length; x++) {

resultmatrix.matrix[x][y] =
m1.getValAt() + m2.getValAt();
}
}



return resultmatrix;

}
 

Martin

Senior Member
Dec 31, 2000
56,859
#8
Is that the code as in your program cause it looks pretty strange to me.. why use getValue() in the first place when you can just pick out the numbers from the array? and getValue() looks pretty strange too.

Just don't get what you're trying to accomplish..
 

Majed

Senior Member
Jul 17, 2002
9,630
#10
++ [ originally posted by Alex ] ++
Hell, I wanted to excercise the mind, here's a class to add, subtract and multiply matrices :D


Mayood, eat my dust :D
i'm having a dust feast! :stress:

:D

nice job :thumb:
 
OP
OP
Loppan

Loppan

Senior Member
Jul 13, 2002
2,528
#15
It's the method Add who doesn't work, this line resultmatrix.setValAt[x][y] = m1.getValAt(x) + m2.getValAt(y);:


Code:
public class Matriximp implements Matrix {
	
	private int [][] matrix;
	
	private int x, y;
	
	public Matriximp(int x, int y) {
		
		this.x=x;
		this.y=y;
		
		matrix = new int[x][y];
	}
	

		public Matrix Add(int m1, int m2) {
		
		Matriximp resultmatrix = new Matriximp (matrix.length,matrix[0].length);
		
		for (int y = 0; y < this.y; y++) {
			
  			for (int x = 0; x < this.x; x++) {
  				
    								
      		 	  		resultmatrix.setValAt[x][y] = m1.getValAt(x) + m2.getValAt(y);
	  		}
		}
			
			
			
		return resultmatrix;
		
	}	
	
public int getValAt(int x, int y) {
		
		return matrix[x][y];
		
	}	
	
	
	public int setValAt(int x, int y) {
		
		return matrix[x][y];
		
	}
 

Martin

Senior Member
Dec 31, 2000
56,859
#16
I haven't tested your code but make sure you get the coordinates right, that can be tricky. Print your results so that you always make sure your x and y variables have the intended value, I found out it doesn't take a lot to get them mixed up.
 
OP
OP
Loppan

Loppan

Senior Member
Jul 13, 2002
2,528
#17
Can someone please explain this code to me espescilly with the mark ?????:

void brute(int a[], int lo, int hi) throws Exception{
if ((hi-lo) == 1) { /// ??????
if (a[hi] < a[lo]) {
int T = a[lo];
a[lo] = a[hi];
a[hi] = T;
pause();
}
}
if ((hi-lo) == 2) { ////?????
int pmin = a[lo] < a[lo+1] ? lo : lo+1;
pmin = a[pmin] < a[lo+2] ? pmin : lo+2;
if (pmin != lo) {
int T = a[lo];
a[lo] = a[pmin];
a[pmin] = T;
pause();
}
brute(a, lo+1, hi);
}
if ((hi-lo) == 3) { /// ????the whole loop
int pmin = a[lo] < a[lo+1] ? lo : lo+1;
pmin = a[pmin] < a[lo+2] ? pmin : lo+2;
pmin = a[pmin] < a[lo+3] ? pmin : lo+3;
if (pmin != lo) {
int T = a[lo];
a[lo] = a[pmin];
a[pmin] = T;
pause();
}
int pmax = a[hi] > a[hi-1] ? hi : hi-1;
pmax = a[pmax] > a[hi-2] ? pmax : hi-2;
if (pmax != hi) {
int T = a[hi];
a[hi] = a[pmax];
a[pmax] = T;
pause();
}
brute(a, lo+1, hi-1);
}
}

void sort(int a[], int lo0, int hi0) throws Exception {
int lo = lo0;
int hi = hi0;
pause(lo, hi);
if ((hi-lo) <= 3) {
brute(a, lo, hi);
return;
}
 

Martin

Senior Member
Dec 31, 2000
56,859
#18
Well it's a recursive sorting algorithm from what I can tell. I don't know what the question marks are for, I guess maybe a binary operator or something. Obviously the "/// ????the whole loop" part is just a comment.
 

Users Who Are Viewing This Thread (Users: 0, Guests: 1)