webForumDet fria alternativet

Complexa tal

8 svar · 613 visningar · startad av Rophael

RophaelMedlem sedan nov. 20085 inlägg
#1

Hej där,

Har skrivit kod i två olika klasser, försöker testa om alla talen fungerar, jag får detta meddelande:

Test 1 failed
expected: 0+0i
actual 0.0+0.0i
Test 2 ok
Test 3 ok
Test 4 ok

Någon som vet var jag har fel:

Klass 1

public class ComplexNumber {
private double realPart;
private double imaginaryPart;

	public ComplexNumber(){	
		realPart = 0.0;
		imaginaryPart = 0.0;
	}

public String toString() {
	return realPart + "+" + imaginaryPart + "i";
}

public void add(ComplexNumber c) {
	realPart = realPart + c.realPart;
	imaginaryPart = imaginaryPart + c.imaginaryPart;
}


public ComplexNumber multiply (ComplexNumber c) {
	double newRealPart = ((this.realPart\*c.realPart)-(imaginaryPart\*c.imaginaryPart));
	double newImaginaryPart = ((this.realPart\*c.imaginaryPart)+(imaginaryPart\*c.realPart));
	return null;
}

public ComplexNumber(double realPart1, double imaginaryPart1){
	realPart = realPart1;
	imaginaryPart = imaginaryPart1;
}

public double getRealPart(){
	return realPart;
}

public void setRealPart(double newRealPart){
	realPart = newRealPart;
}
	
public double getImaginaryPart(){
	return imaginaryPart;
}

public void setImaginaryPart(double newImaginaryPart){
	imaginaryPart = newImaginaryPart;
}

}

Klass 2

public class ComplexNumberTester {
private static int testId = 0;

private static void test(Object actual, Object expected){
	testId++;
	if ((expected == null && actual == null)
			\|\| (expected != null && expected.equals(actual))) {
			System.out.println(String.format("Test %d ok", testId));
		} else {
			System.out.println(String.format("Test %d failed", testId));
			System.out.println(String.format("  expected: %s", expected));
			System.out.println(String.format("  actual %s", actual));
		}
}

public static void main(String\[\] args) {

	
	ComplexNumber c = new ComplexNumber(0, 0);
	ComplexNumber c1 = new ComplexNumber(3, 4);
	ComplexNumber c2 = new ComplexNumber(2, 6);
	ComplexNumber c3 = new ComplexNumber(1, 8);

	test(c.toString(), "0+0i");
	test(c1.toString(), "3.0+4.0i");
	test(c2.toString(), "2.0+6.0i");
	test(c3.toString(), "1.0+8.0i");

}

}

På första klassen får jag två gula varningstrianglar:

* double newRealPart = ((this.realPart*c.realPart)-(imaginaryPart*c.imaginaryPart));

* double newImaginaryPart = ((this.realPart*c.imaginaryPart)+(imaginaryPart*c.realPart));

CompusaMedlem sedan jan. 20023 327 inlägg
#2

Ändra följand i din testklass:

test(c.toString(), "0+0i");

Till:

test(c.toString(), "0.0+0.0i");

Rophael skrev:

På första klassen får jag två gula varningstrianglar:

* double newRealPart = ((this.realPart*c.realPart)-(imaginaryPart*c.imaginaryPart));

* double newImaginaryPart = ((this.realPart*c.imaginaryPart)+(imaginaryPart*c.realPart));

Skulle underlätta om du delar med dig av varningsmeddelandena. :)

SPiNMedlem sedan mars 20007 896 inlägg
#3

Första problemet har Compusa belyst. Det andra beror på att värdena du försöker nå är deklarerade som privata, du får använda dig av c.getRealPart() samt c.getImaginaryPart() istället.

RophaelMedlem sedan nov. 20085 inlägg
#4

Tack för svaret, det verkar fungera...

Jag använder Eclipse Editor..

Trianglarna visar:
The local variable (newRealPart & newImaginaryPart) is never read.

Har varningar i de två klassarna också.

RophaelMedlem sedan nov. 20085 inlägg
#5

SPiN skrev:

Första problemet har Compusa belyst. Det andra beror på att värdena du försöker nå är deklarerade som privata, du får använda dig av c.getRealPart() samt c.getImaginaryPart() istället.

Har försökt med c.getRealPart() & c.getImaginaryPart()
går inte!

Verkar vara något fel på multiplikationen som jag inte vet vad det kan vara?? :OO

Glömde nämna att klass 3 & 4 är helt korrekta, det enda man försöker få igång är första klassen (klass 1 = ComplexNumber)

SPiNMedlem sedan mars 20007 896 inlägg
#6

Är du säker? Låter märkligt. ;)

Anledningen till gula trianglar:

public ComplexNumber multiply (ComplexNumber c) {
   double newRealPart = ((this.realPart*c.realPart)-(imaginaryPart*c.imaginaryPart));
   double newImaginaryPart = ((this.realPart*c.imaginaryPart)+(imaginaryPart*c.realPart)) ;
   return null;
}

Du skapar två nya double's, men använder ingen av dem. Och du returnerar alltid null från den metoden. Det verkar som att det är meningen att du ska skapa en nytt komplext tal och returnera det, egentligen?

RophaelMedlem sedan nov. 20085 inlägg
#7

SPiN skrev:

Är du säker? Låter märkligt. ;)

Anledningen till gula trianglar:

public ComplexNumber multiply (ComplexNumber c) {
   double newRealPart = ((this.realPart*c.realPart)-(imaginaryPart*c.imaginaryPart));
   double newImaginaryPart = ((this.realPart*c.imaginaryPart)+(imaginaryPart*c.realPart)) ;
   return null;
}

Du skapar två nya double's, men använder ingen av dem. Och du returnerar alltid null från den metoden. Det verkar som att det är meningen att du ska skapa en nytt komplext tal och returnera det, egentligen?

Meningen är att få detta fungera och det verkar vara multiplikationen som sagt.

Jag har provat den här där varningstrianglarna försvinner:

public void multiply (ComplexNumber c) {
	double newRealPart = ((this.realPart\*c.realPart)-(imaginaryPart\*c.imaginaryPart));
	double newImaginaryPart = ((this.realPart\*c.imaginaryPart)+(imaginaryPart\*c.realPart));
	realPart = newRealPart;
	imaginaryPart = newImaginaryPart;

}

Men det verkar inte reagera, måste kunna testa multiplikationen i tester (klass 2) kanske?

SPiNMedlem sedan mars 20007 896 inlägg
#8

Jag hoppas att det här inte är en skoluppgift, för jag tog mig friheten att skriva om klasserna som jag tycker att de ska se ut ( ;) ) - och så långt jag testat så fungerar de.

class ComplexNumber {
	private double realPart;
	private double imgPart;

	public ComplexNumber(double realPart, double imgPart) {
		this.realPart = realPart;
		this.imgPart = imgPart;
	}

	public double getRealPart() {
		return this.realPart;
	}
	public double getImgPart() {
		return this.imgPart;
	}

	public static ComplexNumber addition(ComplexNumber firstComplexNumber, ComplexNumber secondComplexNumber) {
		return new ComplexNumber(
				firstComplexNumber.getRealPart() + secondComplexNumber.getRealPart(),
				firstComplexNumber.getImgPart() + secondComplexNumber.getImgPart()
		);
	}

	public static ComplexNumber multiplication(ComplexNumber firstComplexNumber, ComplexNumber secondComplexNumber) {
		return new ComplexNumber(
			(
				firstComplexNumber.getRealPart() * secondComplexNumber.getRealPart()
			)-(
				firstComplexNumber.getImgPart() * secondComplexNumber.getImgPart()
			), (
				firstComplexNumber.getRealPart() * secondComplexNumber.getImgPart()
			)+(
				firstComplexNumber.getImgPart() * secondComplexNumber.getRealPart()
			)
		);
	}

	public String toString() {
		return new StringBuffer(this.realPart+"").append("+").append(this.imgPart).append("i").toString();
	}
}

public class ComplexTest {
	private static int id = 0;
	public static void test(ComplexNumber firstNumber, String secondNumber) {
		id++;
		if(firstNumber != null && firstNumber.toString().equals(secondNumber)) {
			System.out.println(String.format("Test %d ok!", id));
		} else {
			System.out.print(String.format("Test %d error! Expected: " + secondNumber, id));
			System.out.println(", was: " + firstNumber.toString());
		}
	}

	public static void main(String[] args) {
		ComplexNumber cN1 = new ComplexNumber(0, 0);
		ComplexNumber cN2 = new ComplexNumber(2, 8);
		ComplexNumber cN3 = new ComplexNumber(4, 5);
		ComplexNumber cN4 = new ComplexNumber(1, 7);

		ComplexTest.test(cN1, "0.0+0.0i");
		ComplexTest.test(cN2, "2.0+7.5i");
		ComplexTest.test(cN3, "4.0+5.0i");
		ComplexTest.test(cN4, "1.0+7.0i");

		System.out.print("\n0.0+0.0i * 2.0+8.0i: ");
		System.out.println(ComplexNumber.multiplication(cN1, cN2));

		System.out.print("\n0.0+0.0i + 2.0+8.0i: ");
		System.out.println(ComplexNumber.addition(cN1, cN2));
	}
}
RophaelMedlem sedan nov. 20085 inlägg
#9

Tack för hjälpen..!

132 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)