# Matrix ausgeben



## Java112 (23. Apr 2010)

Hallo. ich bin in Java ein totaler Anfänger. 

Ich habe eine für euch wahrscheinlich recht simple Frage, aber ich komme selber nicht weiter.

Ich habe folgenden Code:


```
public class beispiel {
   
public static void main( String[] args )
{   

   ausgabe();
   
}
public static void ausgabe()
{
   double [][]a = {{1,2,3},{4,5,6},{7,8,9}};
   double []b = {0.1,0.2,0.3};
   for (int i=0;i<a.length;i++){
      for (int j=0;j<a[i].length;j++){
   System.out.println((a[i][j])*b[i]);
   }
}
}
}
```

Ich rechne ja die erste Zeile des Arrays a mal den ersten Eintrag des Vektors b. usw.

Ich hätte jetzt aber gerne, dass das Ergebnis hintereinander steht, also so:

0.1__________________0.2_________________0.30000000000000004
0.8__________________1.0_________________1.2000000000000002
2.1__________________2.4_________________2.6999999999999997

Und noch was 0.9*3=2.7, das Programm gibt mir aber 2.6999999999999997 aus. Kann ich irgendwaS machen, dass ich die 2.7 erhalte? ich brauche gerundeten Zahlen für spätere Berechnungen.

Ich hoffe mir kann einer von euch helfen.

Danke schonmal.

LG


----------



## Firephoenix (23. Apr 2010)

die Ausgabe könnte man z.b. so realisieren (wobei die Leerzeichen auch am Ende angehängt werden, weiß nicht inwieweit das für dich von belang ist.
Mit dem Runden kann ich dir gerade selbst leider nicht helfen, da ich mich damit als Anfänger auch (noch) nicht beschäftigt habe


```
public class beispiel {
   
public static void main( String[] args )
{   
 
   ausgabe();
   
}
public static void ausgabe()
{
   double [][]a = {{1,2,3},{4,5,6},{7,8,9}};
   double []b = {0.1,0.2,0.3};
   for (int i=0;i<a.length;i++){
	   System.out.println("");
      for (int j=0;j<a[i].length;j++){
   System.out.print((a[i][j])*b[i]);
   System.out.print("     ");
   
   }
}
}
}
```


----------



## Java112 (23. Apr 2010)

Hallo Firephoenix,

danke erstmal für deine schnelle Antwort. Funktioniert super. Jetzt hoffe ich noch, dass mir jemand meine zweite Frage noch beantworten kann.

LG


----------



## myjday (23. Apr 2010)

Hallo Java112,

hilft dir das?


```
public class FormatierungsTest {

	public static void main(String[] args) {

		double x = 10;
		double y = 3;

		double z = x / y;

		System.out.println(String.format("%6.2f",z));

	}

}
```

Formatiert allerdings nur die Ausgabe.

Du kannst ja auch Dein Ergebnis mit 100 multiplizieren, nach int casten (dann sind die Nachkommastellen weg), wieder nach double casten und durch 100 teilen. Dann hast Du zwei Nachkommastellen.

Vielleicht hilfts ja ...

Schönen Abend noch.

Gruß,

myjday


----------



## Java112 (23. Apr 2010)

Hallo myjday,

ich weiß nicht ganz, wie ich das in meinen oben geposteten Code einbringen soll?
Hast du da vielleicht ne Idee?

LG


----------



## myjday (23. Apr 2010)

Vielleicht so?


```
public class FormatierungsTest {

	public static void main(String[] args) {

		ausgabe();

	}

	public static void ausgabe() {
		double[][] a = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
		double[] b = { 0.1, 0.2, 0.3 };

		for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a[i].length; j++) {

				double c = (a[i][j]) * b[i];

				System.out.print(String.format("%6.2f", c) + "\t");
			}
			System.out.println();
		}
	}

}
```


----------



## Java112 (23. Apr 2010)

Wie du siehst, ich bin noch ganz am Anfang. Vielen Lieben Dank nochmal.:applaus:

Ich habe doch noch eine Frage. Was bedeutet "%6.2f" genau? 

Schönen Abend noch.

LG


----------



## myjday (23. Apr 2010)

Das ist die Formatierung. So sehe ich das zumindest. 6 Stellen vor dem Komma, 2 Stellen danach.
Genauer kann ich Dir das auch nicht erklären. Sorry

Gruß,
myjday


----------



## Java112 (23. Apr 2010)

Das reicht mir schon, danke nochmal.

Schönen Abend noch.

LG


----------



## myjday (24. Apr 2010)

Hallo Java112,

Du wolltest doch noch die Sache mit dem Runden wissen. In der Klasse Math gibt es eine Methode rint.
Diese Methode nimmt einen double-Wert entgegen, rundet auf eine Zahl ohne Nachkommastellen und liefert einen double-Wert zurück.
Wenn Du nun vorher den double-Wert mit 100 multiplizierst, diesen Wert der Methode Math.rint(..) übergibst, den Rückgabewert wiederrum durch 100 teilst - tja dann hast Du auf zwei Nachkommastellen gerundet.

Willst Du natürlich mehr oder weniger Nachkommastellen musst Du den Teiler verändern. Schau bei mathematischen Dingen ruhig mal in die Klasse Math, da hat's so die meisten kleinen Helferlein, die man immer mal brauchen kann schon fertig.

Hier ein Beispiel:


```
public class BeispielFuerRunden{

	public static void main(String[] args) {
		
		double x = 10;
		double y = 3;
		
		System.out.println(rundeAufZweiNachkommastellen(x/y));
		
	}
	
	public static double rundeAufZweiNachkommastellen(double z){
		
		z = Math.rint(z*100);	
		
		return z / 100;
	}	
}
```

In Deinem Fall:


```
public class FormatierungsTest{

	public static void main(String[] args) {
		
		ausgabe();
		
	}
    public static void ausgabe() {
        double[][] a = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };
        double[] b = { 0.1, 0.2, 0.3 };
 
        for (int i = 0; i < a.length; i++) {
            for (int j = 0; j < a[i].length; j++) {
  
                System.out.print(rundeAufZweiNachkommastellen((a[i][j]) * b[i]) + "\t");
      
            }
            System.out.println();
        }
    }	
	
	public static double rundeAufZweiNachkommastellen(double z){
		
		z = Math.rint(z*100);	
		
		return z / 100;
	}
	
}
```

Gruß,

myjday


----------

