# Print Methode



## Herzog Igzorn (12. Nov 2004)

Hallo zusammen

ich habe mal eine frage bezüglich einer selbstgeschriebenen print Methode 
und zwar habe ich mir ein programm geschrieben mit dem ich an einem kubische polynom berechnungen durchführen kann

in der aufgabenstellung ist folgendes verlangt für die print methode

Schreiben Sie eine Methode print, die ein Polynom in Textform nach dem folgenden allgemeinen Schema ausgibt: 
a*x^3 + b*x^2 + c*x + d 
Dabei gilt: 
 -Glieder mit dem Koeffizienten 0 werden nicht ausgegeben, außer im konstanten Glied, wenn alle Koeffizienten null sind. 
 -Glieder mit negativem Koeffizienten werden mit einem Minus-Zeichen ausgegeben. 
 -Ein führendes positives Vorzeichen wird nicht ausgegeben. 

meine print methode schaut so aus


```
void print(){

		if((a == 0) && (b == 0) && (c == 0) && (d == 0)){
			System.out.println(d);
		}
		if((a == 0) && (b == 0) && (c == 0) && (d != 0)){
			System.out.println(d);
		}
		if((a == 0) && (b == 0) && (c != 0) && (d == 0)){
			System.out.println(c + "*x");
		}
		if((a == 0) && (b == 0) && (c != 0) && (d != 0)){
			System.out.println(c + "*x + " + d);
		}
		if((a == 0) && (b != 0) && (c == 0) && (d == 0)){
			System.out.println(b + "*x^2");
		}
		if((a == 0) && (b != 0) && (c != 0) && (d == 0)){
			System.out.println(b + "*x^2 + " + c + "*x");
		}
		if((a == 0) && (b != 0) && (c != 0) && (d != 0)){
			System.out.println(b + "*x^2 + " + c + "*x + " + d);
		}
		if((a != 0) && (b == 0) && (c == 0) && (d == 0)){
			System.out.println(a + "*x^3");
		}
		if((a != 0) && (b != 0) && (c == 0) && (d == 0)){
			System.out.println(a + "*x^3 + " + b + "*x^2");
		}
		if((a != 0) && (b != 0) && (c != 0) && (d == 0)){
			System.out.println(a + "*x^3 + " + b + "*x^2 + " + c + "*x");
		}
		if((a != 0) && (b != 0) && (c != 0) && (d != 0)){
			System.out.println(a + "*x^3 + " + b + "*x^2 + " + c + "*x + " + d);
		}
		if((a == 0) && (b != 0) && (c == 0) && (d != 0)){
			System.out.println(b + "*x^2 + " + d);
		}
		if((a != 0) && (b == 0) && (c == 0) && (d != 0)){
			System.out.println(a + "*x^3 + " + d);
		}
		if((a != 0) && (b == 0) && (c != 0) && (d == 0)){
			System.out.println(a + "*x^3 + " + c + "*x");
		}
		if((a != 0) && (b == 0) && (c != 0) && (d != 0)){
			System.out.println(a + "*x^3 + " + c + "*x + " + d);
		}
		if((a != 0) && (b != 0) && (c == 0) && (d != 0)){
			System.out.println(a + "*x^3 + " + b +"*x^2 + " + d);
		}
}
```

kann man das irgendwie verkürzen d.h. dass ich nicht soviele fallunterscheidungen machen muss und damit die methode nicht so groß wird.

wenn mir da jemand helfen könnte wäre es echt klasse mir ist bisher nichts eingefallen wie ich diese methode kürzen gestallen könnte

ich bedanke mich schonmal im vorraus für eure hilfe


----------



## Bleiglanz (12. Nov 2004)

Tipp: 

verwende einen StringBuffer und eine Methode, die den String zurückgibt (nicht gleich auf die Konsole rausschreiben wg. wiederverwendbarkeit)

Alle Fälle durchzugehen ist absurd!

Löse das Problem lieber gleich allgemein für ein Polynom n-ten grades (dann fällt dir die Lösung wahrscheinlich leichter ein)

die Modellierung mit vier Variablen a,b,c,d ist nicht besonders "Algorithmenfreundlich", mach lieber mit

```
double koeff[] = new double[]{d,c,b,a}
```
ein array daraus

angenommen du hast a_0 + a_1 x + a_2 x^2+ ....+a_n x^n gegeben, was musst du dann machen?

gegeben: ein double[] Array mit a_n,a_(n-1),...,a4,a3,a2,a1,a0
den Koeffizienten drin

for-schleife machen
wenn a_i!=0 den Term a_i + " x^"+i einfügen usw.


----------



## Herzog Igzorn (12. Nov 2004)

vielen dank für deine hilfe Bleiglanz

ich werde meine print Methode mit deinem tipp neu schreiben und hoffen das ich es auch so hinbekomme wie du mir geraten hast


----------



## Herzog Igzorn (12. Nov 2004)

ich habe deinen rat befolgt und bin auch auf eine lösung gekommen

aber ich habe immer noch ein problem wenn ich ein polynom mit den koeffizienten a, b, c, d definiere und d = 0 ist dann gibt mir meine neue methode immer

                  a*x^3 + b*x^2 * c*x^1 +

aus und nicht

                  a*x^3 + b*x^2 + c*x

also es ist das x^1 falsch es sollte nur x ausgegeben werden und es ist das letzte + falsch

meine neue print methode schaut so aus


```
void print2(){
	  double koeff[] = new double[]{d,c,b,a};
	  
	  int koeffLength = koeff.length;

    if((a == 0) && (b == 0) && (c == 0) && (d == 0)){
			System.out.println(d);
		  }
		else
		for(int i = koeffLength-1; i > 0; i--){
		  if(koeff[i] != 0){
		    System.out.print(koeff[i] + "*x^" + i + " + ");
			}
		}
		if(koeff[0] != 0){
		  System.out.print(d);
	  }
	  System.out.println();
	}
```

wenn mir bezgl. dieses problems noch einer helfen könnte wäre ich sehr dankbar


----------



## Gast (12. Nov 2004)

1. würd ich die Ausgabe nicht mit jedes mal system.out.print... machen sondern zuerst alles in einen StringBuffer werfen und am schluss dann alles zusammen einmal rausschreiben.

2. nach Zeile 14 könntest du noch ein if in das if von zeile 12 einfügen dass wenn dein i 1 wird einen anderen String in den Buffer schreibt; nämlich ein x ohne ^1 und ohne +


----------



## Gast (12. Nov 2004)

OK, nochmal das ganze:


1. würd ich die Ausgabe nicht mit jedes mal system.out.print... machen sondern zuerst alles in einen StringBuffer werfen und am schluss dann alles zusammen einmal rausschreiben. 

2. du könntest noch ein if in das if von zeile 12 einfügen dass wenn dein i 1 wird einen anderen String in den Buffer schreibt; nämlich ein x ohne ^1 und ohne +


----------



## Herzog Igzorn (12. Nov 2004)

das mit string buffer höhrt sich nicht schlecht an aber das habe ich bisher noch nicht gelernt bin noch nicht so weit in java aber ich werde mir es möglichst bald anschauen und dann versuchen eine lösung zu finden bis dahin muss ich es leider noch mit den vielen System.out.println() machen


----------

