# Werte quadrieren und Wurzel ziehen



## Mr. X (6. Jan 2007)

Hallo,

Ich bin derzeit dabei ein Programm zu schreiben, mit dem ich zunächst mal Werte quadrieren will, um sie anschliessend zu addieren und aus dem Ergebniss dann die Wurzel zu ziehen. Allerdings habe ich noch einige Probleme. Ich bin derzeit soweit gekommen, dass sich Werte die durch den Benutzer des Programms eingegeben werden eine Variable referenzieren, welche im typ integer vorliegt.
Ich habe es in Integer gemacht, da ich anfangs einfach mal zum Test beide Werte addieren wollte. Wenn ich sie allerdings nicht umkonvertierte, wurde nicht addiert sondern die Zahlen wurden aneinander gefügt (z.B. 5 + 8 = 58).
Vielleicht nicht die eleganteste Lösung, dennoch funktionstüchtig, wie auch immer, hier ist mein Code:


```
import java.io.* ;

public class KTest
{
   public static void main(String[] args) throws Exception
   {
      System.out.println("Setze den Wert der Seitenlaenge a");
      String a=new BufferedReader(new InputStreamReader(System.in)).readLine();
      int i = Integer.parseInt( a ); 

      System.out.println("Setze den Wert der Seitenlänge b");
      String b=new BufferedReader(new InputStreamReader(System.in)).readLine();
      int k =Integer.parseInt( b );
       
          
   }
}
```

Soweit so gut. Aber nun meine Frage: Wie bekomme ich die Werte a & b nun quadriert? Ich habe es bereits versucht, indem ich ganz einfach etwas geschrieben habe wie "a=a*a" aber da kam die Meldung a seie bereits initialisiert, dann habe ich es versucht mit 
	
	
	
	





```
static double exp( double x )
```
 aber das ging auch nicht.
Vielleicht kann mir ja jemand helfen, indem er mir meinen Code erweitert so dass er a & b quadriert, addiert und aus der Summe die Wurzel zieht. Knappe Erläuterungen wären auch nicht schlecht, falls es über einfache mathematische Befehle hinausgeht.

Besten Dank im Voraus.


----------



## Wildcard (6. Jan 2007)

i*=i oder i=Math.pow(i,2)


----------



## raptorrs (6. Jan 2007)

also, wenn ich das richtig sehe, sind a und b doch Strings. Wenn schon, müsstest Du doch i und k zum Rechnen nehmen


----------



## Mr. X (6. Jan 2007)

Ja, mit a & b konnte ich nicht rechnen weshalb ich sie dann in i & k umkonvertiert habe.
Sprichst du auf die Strings an weil ich in dem zweiten codesegment
( double x )
geschrieben habe ? Das war nämlich nur mal so als Codeschema, beim Einsetzen habe ich die Werte durch i & k ersetzt.
Danke Wildcard:
Ich bin jetzt soweit dass ich i und k quadriert und addiert habe. Wie kann ich aus dieser Summe nun die Wurzel ziehen ?


----------



## Wildcard (6. Jan 2007)

> Sprichst du auf die Strings an weil ich in dem zweiten codesegment


Wenn man etwas mit einem BufferedReader einliest erhält man einen String, und damit kann man eben schlecht rechnen.
Wurzel ziehen kann man Math.sqrt. Am besten du liest dich mal in der API ein.


----------



## Mr. X (6. Jan 2007)

Okay, und für sqrt brauche ich die Klasse Math ?

Habe da paar Probleme: Wie sähe mein Code denn aus wenn ich noch die Klasse Math mit reinmachen würde?
Habe sie jetzt mal reingemacht und bekomme eine "Exception in Thread Main..."
Wie sähe denn meine Startmethode aus ?


----------



## SlaterB (6. Jan 2007)

komische Frage, posten deinen Code, der eine Exception erzeugt,
dann kann man dir den Fehler erklären 

ansonsten:
wenn du XXYYZ rein haben willst, dann schreibe
XXYYZ rein


----------



## Mr. X (6. Jan 2007)

Ich muss bloß wissen, wie meine Start-Methode aussehen soll wenn die Math-Class mit drinnen ist. Meinen Code habe ich ja bereits gepostet, bloß ohne die Math-Klasse, aber hier nochmal der Code bei dem derzeit die Fehlermeldung 
"<identifier> expected" kommt, Zeile :9:

```
import java.io.* ;

class Math
{

public class KTest4
{

   public void (String[] args) throws Exception
   {
      System.out.println("Setze den Wert der Seitenlaenge a");
      String a=new BufferedReader(new InputStreamReader(System.in)).readLine();
      int i = Integer.parseInt( a );  // Konvertiert den String a in einen Integer i
      i*=i ;  // quadriert i, also den String a

      System.out.println("Setze den Wert der Seitenlänge b");
      String b=new BufferedReader(new InputStreamReader(System.in)).readLine();
      int k =Integer.parseInt( b );  // Konvertiert den String b in einen Integer k
      k*=k ; // quadriert k, also den String b

      int z = i + k ;
   
      System.out.println (z) ;

  
       
         
   }
} 
}
```


----------



## SlaterB (6. Jan 2007)

läuft bei mir sauber durch, bis du dir mit dem Fehler sicher?


--------

wenn du dein Gehirn ausschalten willst und nach einem fertigen Aufruf der Math-Operation fragst,
dann schreibe das bitte deutlich und nicht so vertrackt mit 'wie meine Start-Methode aussehen soll'  

die soll so aussehen


```
bisheriger Code

neuer Code hier

bisheriger Code weiter
```


so, sorry für die vielen Witze,
vielleicht hilft dir ja ein Lehrbuch beim Java lernen?
http://www.galileocomputing.de/openbook/javainsel5/javainsel05_000.htm#Xxx999378

Wurzel kommt da auch vor..


----------



## SlaterB (6. Jan 2007)

ähh sorry, das

```
class Math
{
```
habe ich gar nicht gesehen, das stört natürlich,
lies mal im Buch, da gibts Beispiele


----------



## Mr. X (6. Jan 2007)

Vielleicht hab ich's falsch formuliert, ich dachte bloß der Teil in Zeile 9, wie auch immer ihr ihn nennen wollt, ist falsch.

Und der Code läuft bei Dir sauber durch, oder ist das auch wieder ein Witz? Mit dem normalen javac lässt er sich bei mir nicht kompilieren, habe es nochmal ausprobiert aber es geht einfach nicht.

Das Buch (gibts übrigends schon die 6te Auflage von) kenne ich, aber mein Problem ist jetzt erst mal wie die Zeile 9 umgeändert werden muss damit's läuft.


----------



## SlaterB (6. Jan 2007)

siehe mein Post etwas später, class Math { muss natürlich komplett raus,
beim Kopieren nicht gesehen


----------



## Mr. X (6. Jan 2007)

Verstehe ich das falsch dass die klasse Math mit rein muss, um die Funktion sqrt zu benutzen?
Ich habe ja bereits klar beschrieben was das Programm machen soll, kann mir jemand sagen ob es nötig ist die Klasse Math da mit reinzubringen? 
Sollte es notwendig sein, wüsste ich gerne wo der Fehler in meinem Code liegt.
Dankeschön


----------



## SlaterB (6. Jan 2007)

nun gut, wenn du so hartnäckig bist, dann kann man dich wohl nicht zum selber denken bringen, 
also ausnahmsweise die fertige Lösung...


```
import java.io.*;

public class KTest2 {
	public static void main(String[] args) throws Exception {
		int i = 2;
		i *= i;

		int k = 3;
		k *= k;

		int z = i + k;

		System.out.println(z);
		double wurzel = Math.sqrt(z);
		System.out.println("Wurzel: "+wurzel);


	}
}
```
über Fehler muss man nicht sprechen, eher für fehlende Programmkenntnisse


----------



## Mr. X (6. Jan 2007)

SlaterB hat gesagt.:
			
		

> nun gut, wenn du so hartnäckig bist, dann kann man dich wohl nicht zum selber denken bringen,
> also ausnahmsweise die fertige Lösung...
> [...]



Nun, ich habe eine einfache Frage gestellt:
"Ist es nötig, die Math-Klasse mit reinzubringen?"
Ich habe nie, weder direkt noch indirekt, nach einer kompletten Lösung gefragt, zumal die Werte nicht im Quellcode vorliegen sollen sondern durch Eingaben in der Konsole getätigt werden.
Ich habe im dritten Post gefragt, "wie denn mein Code aussehen müsste", gefragt war aber lediglich nach Codesegmenten da lediglich die Wurzelziehung fehlte.
Aber wie auch immer, anhand deines Codes konnte ich meine Frage beantworten: 
Nein! es ist nicht nötig die Klasse math mit reinzubringen um von der Funktion sqrt Gebrauch zu machen.
Dieser Satz hätte es auch getan und Du hättest mich "selber zum Denken gebracht".
Und indem Du schreibst "das stört natürlich" kann damit auch die Stellung gemeint sein, wo von ich ausging, und indem Du schreibst "Es muss komplett raus" ist auch nicht die Frage geklärt ob ich dann noch Gebrauch von der Funktion sqrt machen kann.



> über Fehler muss man nicht sprechen, eher für fehlende Programmkenntnisse


Da hast Du Recht, eine Woche ist nicht viel ohne jegliche Vorkenntnisse  ...

Wie auch immer, Meine Frage ist soweit beantwortet, danke auch.


----------



## Wildcard (6. Jan 2007)

Mr. X hat gesagt.:
			
		

> Aber wie auch immer, anhand deines Codes konnte ich meine Frage beantworten:
> Nein! es ist nicht nötig die Klasse math mit reinzubringen um von der Funktion sqrt Gebrauch zu machen.
> Dieser Satz hätte es auch getan und Du hättest mich "selber zum Denken gebracht".


Das ist aber Grundfalsch  :shock: 
Und das ist auch der Grund warum SlaterB so reagiert hat, du musst dich erstmal alleine mit einem Buch deiner Wahl beschäftigen bis du die Grundlagen verstehst.


----------



## Mr. X (6. Jan 2007)

Ich hab's wohl einfach falsch formuliert, womöglich ist der Code von Slater-B richtig weil er "Math" vor "sqrt" schreibt, und die klasse eben somit einbringt, aber was ich darunter verstand die Klasse Math einzubringen war es indem man am Anfang etwas schreibt wie

class Math
{
//Code

Okay, das war falsch, scheint so als ob niemand es von euch verstanden hat wie ich es gemeint habe, bzw. ich nicht genau weiß wie man Klassen einbringt, aber solche Missverständisse passieren nunmal wenn man anstatt direkt meine Frage zu beantworten mir Vorwürfe macht, ich würde nicht selber nachdenken und andere zweideutige Anmerkungen reinmacht.

Eine Antwort à la "Der Typ Math muss vor sqrt gesetzt werden, um von dieser Funktion Gebrauch zu machen" hätte es auch getan, und auch bei diesem Satz weiß ich wieder nicht ob er korrekt ist. Ich hätte "Math" ohnehin vor "sqrt" gesetzt, ohne mir Bewusst zu sein was es _genau_ bewirkt. Mag sein dass dies nötige Grundkenntnisse sind, aber im Verlauf des Threads habe ich eine einfache Frage gestellt die man trotzdem unmissverständlich hätte beantworten können.
Ich will hier zwar in keinster Weise Hilfe kritisieren, aber gerade im Anfängerforum sollte man keine - wenn auch grundlegenden - Kenntnisse voraussetzen, wenn genau in solchen Wissenslücken das Problem besteht. Statt zweideutige Antworten zu machen wäre es auch möglich ausführlich auf die Frage zu antworten, und wenn sie noch so einfach ist.

Natürlich habe ich nicht vor mir in diesem Forum irgendwelche Grundkenntisse anzueignen, dennoch kann es gerade in dieser Forums-Sektion vorkommen dass diese nicht vorhanden sind. Und manchmal ist es nunmal motivierender, wenn man anstatt sich ein Buch mit >700 Seiten durchzulesen kleinere Programme selber zu machen, an denen mal nunmal an kleineren Problemen hängen bleibt und sich durch dessen Problemlösung fortzubilden.


----------



## Wildcard (6. Jan 2007)

Die benötigten Grundkenntnisse (und ja, zumindest elementare Kenntnisse solltest du auch im Anfängerforum besitzen) stehen aber nicht am ende eines 700 Seiten Buchs, sondern an dessen Anfang  :wink: 
Es ist völlig ok hier Anfängerfragen reinzustellen, aber was dir zB noch zu einer sinnvollen Fragestellung fehlt sind entsprechende Termini.
Kein Mensch weiß zB was du mit "Klassen einbringen" meinst.
Wenn du zB eine statische Methode der Klasse Math verwenden willst, dann schreibst du Math.methodenName.
Und genau diese Art von Grundwissen ist für sinnvolle Fragestellungen erforderlich und wird von professionellen Autoren schlicht und einfach besser beantwortet als wir das hier tun werden und können.
Sieh das nicht als persönlichen Angriff, denn das ist es in keinster weise, weder von mir, noch von SlaterB


----------



## Eldar (6. Jan 2007)

Bite benutz keine pow Funktion zum Quadrieren... einfaches x = x*x oder x*=x reicht völlig und ist etwa tausend mal schneller.
Man kann schon bei kleinen Programmen an sowas denken, dann macht man es bei großen Programmen gleich richtig.


----------



## Mr. X (6. Jan 2007)

Wildcard hat gesagt.:
			
		

> Die benötigten Grundkenntnisse (und ja, zumindest elementare Kenntnisse solltest du auch im Anfängerforum besitzen) stehen aber nicht am ende eines 700 Seiten Buchs, sondern an dessen Anfang  :wink:



Ich saß bereits einige Stunden vor "java ist auch eine Insel" aber es heißt schon bei der Beschreibung dass es für Leser mit Vorkenntnissen bei Skript-Sprachen geeignet ist. Wie auch immer, ich werde mir demnächst wohl ein Weiteres bestellen, was ich bereits vor meinem ersten Beitrag hier, in diesem Thema, beschlossen habe. (Siehe letzter Beitrag)



> Es ist völlig ok hier Anfängerfragen reinzustellen, aber was dir zB noch zu einer sinnvollen Fragestellung fehlt sind entsprechende Termini.
> Kein Mensch weiß zB was du mit "Klassen einbringen" meinst.


Okay, dass sehe ich soweit ein, aber das sollte meiner Meinung nach zur Folge haben dass die User entweder keine Lust haben darauf zu antworten oder sich eben die Zeit nehmen es ausführlich zu erklären, auch wenn dann nunmal ein Teil der Erläuterungen nicht ihren vollen Nutzen finden.
Zweites setze ich natürlich nicht voraus, trotzdem ist es nicht nötig, Vorwürfe und zweideutige Anmerkungen anhand von vollkommen missverstandenen Fragen zu schreiben.



> Wenn du zB eine statische Methode der Klasse Math verwenden willst, dann schreibst du Math.methodenName.


Danke, mit einer solchen Antwort zur richtigen Zeit wäre es nie über 6 Antworten hinaus gegangen.
Seit meiner dritten Antwort war meine Frage, wie ich die Funktion "sqrt" der Klasse "Math" zuordne. Ich gebe zu dass meine Frage dort etwas missverständlich war, doch mit etwas nachfragen hätte man es problemlos auch bei insgesamt 8 Antworten belassen können

Das Thema muss allerdings nicht noch öfter nach oben gepusht werden, ich denke damit sollte alles soweit geklärt sein.

Danke noch an Wildcard, dessen Beiträge mir doch geholfen haben.

EDIT: Danke auch noch für den Tipp, Eldar


----------



## SlaterB (7. Jan 2007)

bei sowas ist es natürlich müßig, Erklärungen zu finden,
aber falls dir das ganze nun noch nicht 100% klar ist:

der Aufruf Math.sqrt ist der gleiche wie
Integer.parseInt,

und letzteren hattest du ja schon verwendet, da hattest du ja auch nicht
class Integer { .. davor geschrieben,

bei ganz unbekannten Klassen müsste man diese natürlich importieren:
import package.Klassenname;

aber Integer und Math gehören zu der Menge von Klassen, die automatisch importiert werden,
package java.lang


----------



## Mr. X (7. Jan 2007)

Ja, das mit den unbekannten Klassen war mir bereits bewusst, mich hat da nur die API-Dokumentation bisschen durcheinander gebracht weil ich dachte man würde packages von Klassen unterscheiden, so dass man Klassen eben ähnlich wie ich es im Code versucht habe importiert, und Packages dann zum Beispiel mit "import java.math" importiert.
Habe also auch die API missverstanden.
Naja ok, ich denke ich hab's soweit verstanden, danke nochmal


----------



## Wildcard (7. Jan 2007)

Imports braucht man nur für eine kürzere Schreibweise, technisch bewirken sie nichts. Lässt man alle imports weg muss jede Klasse über ihren Full Qualified Name angesprochen werden (bspw: javax.swing.JLabel statt einfach JLabel).
Wenn man die basics beherrscht und anfängt eine IDE zu verwenden kümmert sich selbige automatisch um die imports.


----------

