# Java Anfänger hat Probleme mit Scanner



## Semphi (24. Sep 2012)

Hallo,

ich mache zurzeit eine Schulische Ausbildung zum Informations und Kommunikationstechnischen Assistenten und habe jetzt in Programmieren die ersten 9 Schulstunden Java hinter mehr.

Im Gegensatz zu meinen Klassenkameraden verstehe ich sehr schnell und habe auch shcon vorgearbeitet.

Jetzt habe ich mir zu Hause den Java-Editor auch runtergalden und zum laufen gebracht und stoße auf ein Problem welches in der Schule noch einwandfrei funktioniert hat.


Beim benutzen des Scanners

Scanner sc = new Scanner(System.in);
r = sc.nextDouble();

bekomme ich folgende Fehlermeldung.

Angeblich soll die Varieble sc bereits durch main(String[]) definiert sein.


```
import java.util.Scanner;

class Rechner
{
  public static void main(String[] args)
  {
   
    final double PI = 3.14;
    double r;
    double u;
    double a;
    double h;
    double v;
    
    System.out.println("Zylinderberechnung:");
    System.out.println("===================");
    System.out.println("");
    System.out.print("Radius: ");
    Scanner sc = new Scanner(System.in);
    r = sc.nextDouble();
    System.out.print("Höhe: ");
    Scanner sc = new Scanner(System.in);
    h = sc.nextDouble();
    u = PI * (r+r);
    a = PI * (r*r);
    v = a*h;
    System.out.println("Umfang: " + u);
    System.out.println("Fläche: " + a);
    System.out.println("Volumen: " + v);
     
    
   
  }
}
```

Rechner.java:22:13: error: variable sc is already defined in method main(String[])
    Scanner sc = new Scanner(System.in);
            ^
1 error


Ich weiß ich habe noch nicht viel Ahnung davon, aber ich frage mich eben warum er mir zu Hause diesne Fehler ausgibt und in der Schule alles einwandfrei funktioniert.
Der Quellcode ist 1 zu 1 derselbe.


----------



## Fab1 (24. Sep 2012)

> Der Quellcode ist 1 zu 1 derselbe.



Ist wohl nicht der Fall sonst würde es ja wohl funktionieren.

Hast du dir den Quellcode schon mal angeschaut? Die Fehlermeldung ist nämlich mehr als aussagend.





Spoiler: Tipp



Tipp schau dir mal Zeile 19 und Zeile 22 von dem von dir geposteten Code an.


----------



## Templarthelast (24. Sep 2012)

Besonders als Programmieranfänger ist es oft sehr hilfreicht, wenn man anfängt die Fehlermeldungen konstruktiv zu verstehen. Am Anfang des Programmierprozesses probiert man vieles aus und macht dabei auch viele Fehler, die man später nicht mehr machen würde. Wenn du dir nochmal die Fehlermeldung anschauen und möglicherweise auch mal auf Deutsch übersetzen würdest, wäre dir wahrscheinlich ein Brett vom Kopf gefallen. Diese Fehlermeldung ist eigentlich mehr als offensichtlich. Deshalb spar ein wenig Zeit und lern noch mehr, wenn du dir einfach die Fehlermeldungen anschaust und daraus den Fehler ableitest.


----------



## TryToHelp (25. Sep 2012)

Hi Semphi,

ich weiß nicht, ob du die erklärung verstanden hast. Das Problem ist, das du in der funktion main, wie es die Fehlermeldung ja angibt, den Scanner schon definiert hast. Das ist, wie Fab1 gesagt hat in Zeile 19 und 22 der Fall. Da in der Zeile 19 der funktioin main, Scanner sc schon definiert ist, bekommst du in der Zeile 22 den Fehler. 


```
import java.util.Scanner;
 
class Rechner
{
  public static void main(String[] args)
  {
   
    final double PI = 3.14;
    double r;
    double u;
    double a;
    double h;
    double v;
    
    System.out.println("Zylinderberechnung:");
    System.out.println("===================");
    System.out.println("");
    System.out.print("Radius: ");
    Scanner sc = new Scanner(System.in);
    r = sc.nextDouble();
    System.out.print("Höhe: ");
// Kommentar
// Hier musst du das Scanner weglassen, da du sonst die Variable sc doppelt deffinierst
// So sollte es jetzt funktionieren
// Aber wahrscheinlich kannst du die Zeile auch komplet weglassen
    sc = new Scanner(System.in);
    h = sc.nextDouble();
    u = PI * (r+r);
    a = PI * (r*r);
    v = a*h;
    System.out.println("Umfang: " + u);
    System.out.println("Fläche: " + a);
    System.out.println("Volumen: " + v);
     
    
   
  }
}
```


----------



## Gast2 (25. Sep 2012)

```
// Kommentar
// Hier musst du das Scanner weglassen, da du sonst die Variable sc doppelt deffinierst
// So sollte es jetzt funktionieren
// Aber wahrscheinlich kannst du die Zeile auch komplet weglassen
    sc = new Scanner(System.in);
```
besser noch: keinen zweiten Scanner erzeugen, einer reicht völlig aus.


----------



## Semphi (25. Sep 2012)

Erstmal vielen Dank für eure Antworten.

Wenn man zu müde ist sollte man soetwas einfach nicht mehr machen.

Natürlich brauch ich den Scanner nur einmal, den kann man ja auch schon oben bei den ganzen anderen Variablen definieren.

Danke Leute, nächstes mal sollte ich vielleicht einfach ne Nacht drüber schlafen und am nächsten Tag ausgeschlafen nochmal darüber nachdenken und sowas nicht machen wenn ich schon den ganzen Tag übermüdet bin.


----------



## Campl3r (14. Okt 2012)

Wenn man übermüdet ist, sollte man echt nicht programmieren, da kommt schon echt kruder Code dabei raus.


----------

