Ich mache mich derzeit mit Tutorials ein wenig mit Java vertraut und bin gerade bei dem Befehl “Scanner”, leider spuckt bei mir eclipse eine Fehlermeldung aus.
Ich verwende:
Eclipse Java EE IDE for Web Developers.
Version: Luna Release (4.4.0)
Build id: 20140612-0600
jdk1.8.0_05
Ich hoffe man kann aus den Beeichnungen meine Versionen ablesen.
public class Scanner {
public static void main(String arg[]){
int i;
Scanner s = new Scanner(System.in);
System.out.println("Wie alt bist du ?");
i = s.nextInt();
if(i>=18){
System.out.println("Du bist Volljährig");
}else{
System.out.println("Du bist noch nicht Volljährig");
}
}
}
Die Fehlermeldung lautet:
Exception in thread “main” java.lang.Error: Unresolved compilation problems:
The constructor Scanner(InputStream) is undefined
The method nextInt() is undefined for the type Scanner
at Scanner.main(Scanner.java:9)
Ich vermute, dass ich vielleicht eine andere Version vom JDK habe als die in den Tutorials ?
falsch … du hast deine klasse einfach nur selten dämlich falsch benannt
du importierst bereits eine klasse mit dem namen Scanner … also darf deine nicht genau so heißen …
ändere den namen deiner Klasse einfach in z.b. “ScannerTest” oder sowas und schon läuft alles
Jo, ist sicherlich jedem Entwickler mal passiert…mir zumindest
Du kannst deine Klasse natürlich Scanner nennen. Dann musst du aber den eigentlichen Scanner mit voller Angabe „java.util.Scanner“ bennenen wenn du ihn aufrufst.
sehe ich genau anders da genau solche dinge eigentlich in jedem besseren oder schlechteren anfänger-buch erklärt werden … oder zumindest sollten
außerdem gehört auch etwas gesunder menschen verstand dazu
übertragen auf die reale welt :
du erschaffst dir gerade einen kumpel … nennen wir ihn mal Paul
und willst aber gewisse eigenschaften von bereits existierenden freunden kopieren und holst dir diesen eben ran, nennen wir diesen in deinem fall auch mal Paul
so … nun sprichst du einen von beiden einfach mit Paul an ohne dabei einen von beiden direkt anzusehen
quizfrage : woher weis der richtige das er gemeint ist ?
und genau das ist die fehlermeldung des compilers : ich weis nicht welchen Scanner du meinst und kann daher den code nicht sauber auflösen
so ein gewisses grundverständnis der natur und ein mindestmaß an logik um sich selbst gewisse dinge herleiten zu können sollte man als programmierer wirklich haben
[QUOTE=Sen-Mithrarin]sehe ich genau anders da genau solche dinge eigentlich in jedem besseren oder schlechteren anfänger-buch erklärt werden … oder zumindest sollten
außerdem gehört auch etwas gesunder menschen verstand dazu
so ein gewisses grundverständnis der natur und ein mindestmaß an logik um sich selbst gewisse dinge herleiten zu können sollte man als programmierer wirklich haben[/QUOTE]
[QUOTE=timbeau]Gehts noch?[/QUOTE]Bleib mal locker…
Ich finde schon, dass Sen-Mithrarin gewissermaßen recht hat, auch wenn es hart klingt. fre4k hat jedenfalls etwas dazu gelernt und sich bereits einsichtig gezeigt, dieses “selten dämlich” macht keiner von uns noch einmal. So was nennt sich “AHA-Effekt”.
@Unregistered:
Was bitte willst du in Java mit Namensräumen? Die Java-Paket-Struktur ist für solche Unterscheidungen völlig ausreichend, findest du nicht?
BTW.: Stört es, wenn ich das Thema als gelöst markiere? Denke mal nicht.
Nein, hat er nicht. Das ist keine Dummheit oder Dämlichkeit, sondern vorerst einfach nur Unerfahrenheit. Denn dass @fre4k ganz am Anfang steht, hat er im Ausgangspost bereits geschrieben. Als ob @Sen-Mithrarin solche Fehler nie gemacht hätte…
Mit solchen Aussagen stößt man Leute vor den Kopf statt ihnen sachlich zu helfen. Und deshalb ist dieser Ton unangemessen. Wenn jemand den selben Fehler mehrfach wiederholt, dann trifft es vielleicht zu, dass es „dämlich“ ist. Aber auch dann muss man es demjenigen der Hilfe sucht nicht an den Kopf werfen, sondern kann seine Kommentare einfach für sich behalten.
[QUOTE=cmrudolph]Nein, hat er nicht.[/QUOTE]Es ist aber keinesfalls sinnvoll, sich als unbeteiligter User mehr über so etwas aufzuregen, als der TO selber.
Da steht nichts davon, das der TO selber “dämlich” ist, sondern nur, das seine Tat, seine Klasse “Scanner” so zu nennen, “selten dämlich” war. So etwas ist “selten dämlich” und zwar unabhängig davon, ob man es selbst schon mal gemacht hat oder nicht. “Selten dämlich” klingt zwar hart, aber immerhin kann man in diesem Fall davon ausgehen, dass da auch für Sen ein gewisses Maß an Selbsterkenntnis drin steckt. Von daher habe ich mit seiner Aussage kein Problem und der TO anscheinend auch nicht, jedenfalls hat er sich nicht darüber beschwert. Worüber regt ihr euch also auf?
Wenn ich sage, dass jemand etwas „selten dämliches“ (wobei „selten dämlich“ sogar noch die Steigerung von „dämlich“ ist) getan hat, dann richtet sich das gegen die Person, die das getan hat. Das ist einfach kein Umgang. Und eine Namenskollision ist nichts, was „selten dämlich“ ist, sondern zum Lernprozess dazugehört.
Dieses Mal hat der TO darüber hinweggesehen, was ich äußerst positiv und nicht selbstverständlich finde. Wenn das wiederholt passiert, vergrault man einen Anfänger.
Ich erwarte eigentlich von der Moderation, dass geschlichtet wird anstatt solch einen Umgangston auch noch zu unterstützen.
[QUOTE=cmrudolph]Ich erwarte eigentlich von der Moderation, dass geschlichtet wird anstatt solch einen Umgangston auch noch zu unterstützen.[/QUOTE]Alles ist gut… locker bleiben…! Um irgendwas zu schlichten, müsste sich der TO über eine ungerechte Behandlung beschweren und nicht User, die etwas gegen diesen Umgangston haben. Können wir es dabei belassen oder muss hier dicht gemacht werden? Stillschweigen beantwortet die Frage mit “ja”, ansonsten bitte PN.
[QUOTE=Spacerat]@Unregistered:
Was bitte willst du in Java mit Namensräumen? Die Java-Paket-Struktur ist für solche Unterscheidungen völlig ausreichend, findest du nicht?[/QUOTE]
Es gibt auch in JAVA Namensräume. Durch die “Import”-Anweisung von java.util.Scanner liegt er und die eigene Klasse Scanner imselben Namensraum (imho), Verwendung von Scanner (Instanzziierung oder statische Variablen/Methoden) führt bei der Übersetzung/Laufenlassen zu “java.lang.Error: Unresolved compilation problems”. Umgehen: java.util.Scanner mit java.util.Scanner ansprechen, oder die eigene Klasse Scanner in ScannerTest umbenennen (UpperCamelCase bei Klassenbezeichnungen).
Ich wollte keinesfalls Öl ins Feuer gießen. Es gibt doch auch immer Streit darum, wann trivial gesagt werden darf. Viele ähnlich klingende Bezeichner zu haben, ist keineswegs trivial, sondern eigentlich gut.
fre4k kann auch beleidigt/nicht einverstanden sein und trotzdem oder gerade deshalb nichts mehr schreiben, dann liegt es tatsächlich an eurem Umgang/Verhalten. Ich bin nun off.
[QUOTE=Unregistered]Es gibt auch in JAVA Namensräume.[/QUOTE]Nur heissen diese Namensräume in Java halt Pakete.
Ich finde, dass man das hier alles nicht zu ernst nehmen sollte. Verstehen wir das „selten dämlich“ schlicht als „besonders ungünstig“ und bleiben auf dem Teppich.
BTW.: Ein Fehler ist das im Übrigen nicht, weil nirgendwo steht, dass es verboten wär, seinen Klassen Namen von bereits in dieser verwendeten Klassen zu verwenden. Ich hätte also auch ein Problem damit, für dieses Problem eine ähnlich passende negative Bezeichnung ausser „selten dämlich“ zu finden. MAW.: Dieses Problem ist „selten dämlich“ und nicht der User.
Edit:
Schmeisst doch nicht immer nur Begriffe in den Raum, sondern schreibt doch gleich dazu, was ihr damit meint. Eine „import“-Anweisung jedenfall dürfte hier kaum ausreichen (funktioniert afaik nicht mal), um das Problem zu lösen.
@Spacerat : Gibt es nicht die Namensräume global, Paket, Klasse, Methode+Parameter und Rumpf/Block (von groß nach klein)? Oder sind das die Sichtbarkeiten/Scopes, wobei Variablen in Klassen (und Methoden) einen anderen Scope haben als in Methoden? In JAVA braucht man ja nicht wie in C bei wechselseitigen Aufrufen von Methoden/Funktionen Funktionsprototypen („Vorwärtsdeklarationen“).
Das geht meines Erachtens schon wieder viel zu weit am Thema vobei. Wie definiert man Namespaces? Welche Konventionen gelten (abgesehen von Groß- und Kleinschreibung) für Methoden und Variablen-Scopes? In Namespaces darf jeder Name nur einmal verwendet werden, bei Methoden ist die Signatur entscheidend, also vom Namen, Sichtbarkeit und Returncode gleiche Methoden aber mit verschiedenen Parametern. Variable-Scopes sind da eher wieder der Namespaces ähnlich, haben diesen Gegenüber aber den Unterschied, dass sie sich aus der Anordnung verschiedener Methoden- und Klassenrümpfen ergeben.
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package pkg20alter;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Quelle:
* http://www.akjs-sh.de/service/gesetzliche_regelungen/was_darf_man_in_welchem_alter.html
* , 20.7.'14 , alles davon abgeschrieben
*
* @author CB et siehe Quelle
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Wie alt bist du??");
try {
String line = br.readLine().toLowerCase().trim();
try {
int i = Integer.parseInt(line);
if (i < 0) {
// ignore
} else if (i < 14) {
System.out.println("Sie dürfen bis 22h in Gaststätten usw.");
System.out.println("Sie dürfen sich geeignete Filme und Spiele bis 20h ansehen");
} else if (i < 16) {
System.out.println("Sie dürfen bis 24h in Gaststätten usw.");
System.out.println("Sie dürfen sich geeignete Filme und Spiele bis 22h ansehen");
} else if (i < 18) {
System.out.println("Sie dürfen bis 24h in Gaststätten usw.");
System.out.println("Sie dürfen sich geeignete Filme und Spiele bis 24h ansehen");
System.out.println("Sie dürfen Wein und Bier kaufen, aber nix mit Zucker oder so");
} else if (i < 150) {
System.out.println("Sie dürfen fast alles (wenn es ihre Eltern erlauben).");
} else {
System.out.println("Sie sind derzeit zu alt!!");
}
} catch (NumberFormatException nfeIgnore) {
// ignore
}
} catch (IOException ioeIgnore) {
// ignore
}
}
}```
Grüße
Edit: Achso, **[U]kein Anspruch[/U]** auf Richtigkeit, Vollständigkeit undOder pädagogisch "richtig". :rolleyes:
Edit2: Und wenn du dir einen Spaß erlauben willst, schreibst du vor die vorletzte geschweifte Klammer noch ein `main(args);`, dann ist das Proggi gar nicht so leicht zu schließen. ; - )
Oh, das muss heißen, erhebt keinen Anspruch auf Vollständigkeit usw. Das hab’ ich ganz übersehen. Und Ihre Eltern usw.
Jemand Interesse an der .jar ?
Nacht.