---
title: "Complexa tal"
type: "forum-thread"
url: "https://www.webforum.nu/amne/java/175180-complexa-tal"
topic: "Java"
topic_url: "https://www.webforum.nu/amne/java"
author: "Rophael"
published: "2008-11-05T14:44:13.000Z"
updated: "2008-11-06T13:06:33.000Z"
replies: 8
views: 624
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/java/175180-complexa-tal"
---

# Complexa tal

## #1 — Rophael, 2008-11-05T14:44Z

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));

Permalänk: https://www.webforum.nu/p/175180

## #2 — Compusa, 2008-11-05T14:58Z

Ä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. :)

Permalänk: https://www.webforum.nu/p/2152339

## #3 — SPiN, 2008-11-05T15:03Z

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.

Permalänk: https://www.webforum.nu/p/2152341

## #4 — Rophael, 2008-11-05T15:22Z

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å.

Permalänk: https://www.webforum.nu/p/2152344

## #5 — Rophael, 2008-11-05T15:27Z

> **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)

Permalänk: https://www.webforum.nu/p/2152345

## #6 — SPiN, 2008-11-05T17:18Z

Ä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?

Permalänk: https://www.webforum.nu/p/2152357

## #7 — Rophael, 2008-11-05T18:53Z

> **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?

Permalänk: https://www.webforum.nu/p/2152370

## #8 — SPiN, 2008-11-05T19:45Z

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));
	}
}
```

Permalänk: https://www.webforum.nu/p/2152376

## #9 — Rophael, 2008-11-06T13:06Z

Tack för hjälpen..!

Permalänk: https://www.webforum.nu/p/2152461

---

Tråden på webben: https://www.webforum.nu/amne/java/175180-complexa-tal
