Hallo bin neu hier und brauche gleich mal eure Hilfe
Dieses Programm was ich geschrieben, da soll der User den Radius des Kreises eingeben können und die Fläche wird berechnet doch irgendetwas stimmt nicht:
Java:
importjava.io.*;class kreis
{publicstaticvoid main (String[] args)throwsIOException{InputStreamReader inStream =newInputStreamReader(System.in );BufferedReader stdin =newBufferedReader( inStream );int radius;int pi;System.out.println("Geben sie den Radius ein: ");
radius = stdin.readLine();
pi = stdin.readLine();int result =(radius*radius*pi);System.out.println("Fläche: "+ result);}}
Fehlermeldung:
run:
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - incompatible types
Geben sie den Radius ein:
required: int
found: java.lang.String
at kreis.main(Main.java:14)
Java Result: 1
ERSTELLEN ERFOLGREICH (Gesamtzeit: 0 Minuten 0 Sekunden)
Hier liegt die Antwort. Du liest einen String ein und versucht den einem int zu zuweisen.
Besser:
[JAVA=14]radius = Integer.valueOf(stdin.readLine()).intValue();[/code]
importjava.io.*;class kreis
{publicstaticvoid main (String[] args)throwsIOException{InputStreamReader inStream =newInputStreamReader(System.in );BufferedReader stdin =newBufferedReader( inStream );int radius;double pi;System.out.println("Geben sie den Radius ein: ");String text = stdin.readLine();
radius =Integer.parseInt(text);
pi =Math.PI;int result =(pi*Math.pow(radius,2));System.out.println("Fläche: "+ result);}}
Nein. Nix besser. Als Begründung wieder mal ein böses Microbenchmark:
Java:
publicclass _ {//square and multiply: reicht für ganzzahlicge exponenten völlig ausprivatestaticdoublepow(double base,int exponent){double result=1;for(double x=base; exponent>0;x*=x,exponent>>=1){if((exponent&1)==1) result*=x;}return result;}//zum quadrieren lohnt es sich eigentlich überhaupt nichtprivatestaticdoublesquare(double x){return x*x;}publicstaticvoidmain(String..._){finaldouble MAX=10;finaldouble DX=0.0000001;//Kleiner vergleich: laufen lassen, zeiten anguggen long tMathPow=System.currentTimeMillis();for(double x=0; x<MAX; x+=DX){Math.pow(x,2);}
tMathPow=System.currentTimeMillis()-tMathPow;long tPow=System.currentTimeMillis();for(double x=0; x<MAX; x+=DX){pow(x,2);}
tPow=System.currentTimeMillis()-tPow;long tSquare=System.currentTimeMillis();for(double x=0; x<MAX; x+=DX){square(x);}
tSquare=System.currentTimeMillis()-tSquare;System.out.println("Benötigte Zeiten [ms]:"+"\nMath.pow:\t"+tMathPow+"\npow for int:\t"+tPow+"\nsquare:\t\t"+tSquare);}}
Math.pow sollte nur dann benutzt werden, wenn man wirklich einen nicht-ganzzahligen exponenten hat. Für ganzzahlige Exponenten ist diese methode verschwenderischer Unsinn, denn dort wird zum einen der exponent in double übersetzt, und zum anderen ist die methode halbe stunde lang damit beschäftigt, die basis auf 20 nachkommastellen genau zu logarithmieren, um das ganze zusammen dann zu einem exponenten zu verwurschten. Zusätzlich werden etwa 15 verschiedene sonderfälle abgefragt, siehe die Liste.
Auf meinem rechner sehen die zeiten also wie folgt aus: