# Hochzahlen und double.



## Sowiedu (8. Dez 2006)

Hiho, bin neu hier, also seid nich zu streng zu mir   

Also, zu meiner Frage.
Ich mach erst seit nen paar wochen Java (in der Schule) und möchte jetz mein eigenes Programm schreiben, welches mir nach eingabe von a,b und c mit der mitternachtsformel x1 und x2 berechnet.
Soweit, sogut.
ABER, ich habe a, b und c als double-Klasse definiert. Nur das Problem ist, dass ich mit der double-Klasse die 
Operation "^" nicht durchführen kann, zumindest laut Compiler-Error:



> Mitternachtsformel.java:32: operator ^ cannot be applied to double,int
> xeins = ((-b)+Math.sqrt((b^2)-4*a*c))/(2*a);



Jetz weiss ich net weiter, soll ich jetzt für die eingegebenen Variablen (a,b,c) nen anderen Typ verwenden? wenn ja welchen? Das, was der Benutzer eingibt, soll nach möglichkeit, alles interpretiert werden, d.h. (später) soll er auch sachen wie "1/2" oder so eingeben können, aber für den anfang geb ich mit au mit natürlich/kommazahlen zufreiden.

Hoffe mir kann jemand helfen, hier der Code:


```
import java.util.*;
/**
  *
  * Programm zum berechnen von x1 und x2
  * mit der Mitternachtsformel
  * @version 0.1 vom 08.12.2006
  * @P.P
  */

public class Mitternachtsformel {

  public static void main(String[] args) {
    Scanner eingabe = new Scanner(System.in);
    //Variablen
    double a, b, c, xeins, xzwei, xdrei;
    //Begruessung
    System.out.println("Herzlich Willkommen zum Mitternachtsberechner 0.1");
    System.out.println();
    System.out.println("Bite geben Sie a,b und c ein:");
    System.out.print("a: ");
    a = eingabe.nextDouble();
    System.out.print("b: ");
    b = eingabe.nextDouble();
    System.out.print("c: ");
    c = eingabe.nextDouble();
    System.out.println();
    //Verarbeitung
    if (Math.sqrt((b^2)-4*a*c) <= 0) {
      System.out.println("Wurzel ist negativ! --> Keine Loesung");
    }
    else
    xeins = (double)((-b)+Math.sqrt((b^2)-4*a*c))/(2*a);
    xzwei = (double)((-b)-Math.sqrt((b^2)-4*a*c))/(2*a);
    
    
  }
}
```


----------



## Wildcard (8. Dez 2006)

^ ist eine Invertierung auf bitebene.
Du suchst Math#pow


----------



## Sowiedu (8. Dez 2006)

Also muss ich praktisch anstelle von "a^2"
 "Math.pow(double a, double 2)" schreiben, oder wie?
Wär nett wenn du's mir ein bisschen auführlicher erklären könntest


----------



## Wildcard (8. Dez 2006)

Warum? Du hast's doch schon verstanden  :wink:


----------



## Sowiedu (8. Dez 2006)

naja, das hab ich ma glatt gemacht aber nun bringt er:



> Mitternachtsformel.java:28: '.class' expected
> if (Math.sqrt((Math.pow(double b, double 2))-4*a*c) <= 0) {
> ____________________^


----------



## SlaterB (8. Dez 2006)

aus tiefen Hackerkreisen hört man immer wieder,
dass auch
a*a
geht 

aber allgemein muss es eben Math.pow bzw. eine eigengeschriebene Operation sein,
ein Hoch-Zeichen gibts in Java nicht

---------

korrekte Syntax ist natürlich 
Math.pow(b, 2)

ist doch klar


----------



## Sowiedu (8. Dez 2006)

SlaterB hat gesagt.:
			
		

> aus tiefen Hackerkreisen hört man immer wieder,
> dass auch
> a*a
> geht



WTF? Wie kann man nur so blind wie ich sein >.< oh mein Gott....DU HAST RECHT  :applaus: 

 :autsch:  :autsch:  :autsch:


----------



## Wildcard (8. Dez 2006)

SlaterB hat gesagt.:
			
		

> korrekte Syntax ist natürlich
> Math.pow(b, 2)
> 
> ist doch klar


----------



## Sowiedu (8. Dez 2006)

Ok, nun bringt er folgendes:



> Mitternachtsformel.java:29: '.class' expected
> if (Math.sqrt((Math.pow(double b, double 2))-4*a*c) <= 0) {
> ____________________^
> Mitternachtsformel.java:33: ')' expected
> ...



also meiner Meinung nach ist die Klammersetzung richtig, aber was ist mit "class" gemeint? (Klar, ne Klasse, aber...ihr wisst ja, bin neu ^^)

Hier nochma der aktuelle Code:


```
import java.util.*;
/**
  *
  * Programm zum berechnen von x1 und x2
  * mit der Mitternachtsformel
  *
  * @version 0.1 vom 08.12.2006
  * @P.P
  */

public class Mitternachtsformel {

  public static void main(String[] args) {
    Scanner eingabe = new Scanner(System.in);
    //Variablen
    double a, b, c, xeins, xzwei, xdrei;
    //Begruessung
    System.out.println("Herzlich Willkommen zum Mitternachtsberechner 0.1");
    System.out.println();
    System.out.println("Bite geben Sie a, b und c ein: ");
    System.out.print("a: ");
    a = eingabe.nextDouble();
    System.out.print("b: ");
    b = eingabe.nextDouble();
    System.out.print("c: ");
    c = eingabe.nextDouble();
    System.out.println();
    //Verarbeitung
    if (Math.sqrt((Math.pow(double b, double 2))-4*a*c) <= 0) {
      System.out.println("Wurzel ist negativ! --> Keine Loesung");
    }
    else
    xeins = -b + Math.sqrt((b*b)-4*a*c)/(2*a);
    xzwei = -b - Math.sqrt((b*b)-4*a*c)/(2*a);
    
    
  }
}
```


----------



## Sowiedu (8. Dez 2006)

ok hat sich erledigt, ich depp hab das b*b im if-Teil vergessen


----------



## SlaterB (8. Dez 2006)

da du es bestimmt immer noch nicht gesehen hattest:
korrekt wäre 
Math.pow(b, 2) 

ich nutze dies gleich zum Hinweis, dass der andere Fehler auch nicht aufgetreten wäre, wenn du sparsam gewesen wärest:

if (Math.sqrt(b*b-4*a*c) <= 0) {
      System.out.println("Wurzel ist negativ! --> Keine Loesung");
}

geht sowieso nicht, da Math.sqrt dir kaum die negative Wurzel ausrechnet 

mache

```
double unterWurzel = b*b-4*a*c;
if (unterWurzel < 0) {
      System.out.println("Wurzel wäre negativ! --> Keine Loesung");
} else {
double irgendwas = Math.sqrt(unterWurzel)/(2*a);
xeins = -b + irgendwas;
xzwei = -b - irgendwas ;
```
so rechnest du nichts zu oft aus und vermeidest Tippfehler


----------

