Bin in Sachen Java noch ein ziemlich Anfänger und bin auf folgedes Problem gestoßen.
Ich will eine Integer Zahl von der Tastatur einlesen. Anschließend einen String.
Wenn ich jetzt meine Zahl eingelesen hab, wird das Einlesen des Strings einfach übersprungen.
Hier mein Code:
Code:
import java.io.*;
import java.util.Scanner;
public class college_interface {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner( System.in );
System.out.println("(1) Academic Stuff");
System.out.println("(2) Student");
System.out.println("(3) Researcher");
System.out.println("(4) Other");
System.out.print("Welcome to the renting agency of our college.\nPlease enter your kind of membership: ");
int number = 0;
number = scan.nextInt();
System.out.println("My number: " + number);
if (number == 1)
{
System.out.println("\nYou are now logged in as acedmic stuff. \nPlease enter your name: ");
String name = scan.toString();
Stuff first = new Stuff(name);
first.getInfo();
}
else
{
System.out.println("Incorrect kind of membership.");
}
}
}
Und das hier wird auf der Console ausgegeben:
Code:
(1) Academic Stuff
(2) Student
(3) Researcher
(4) Other
Welcome to the renting agency of our college.
Please enter your kind of membership: 1
My number: 1
You are now logged in as acedmic stuff.
Please enter your name:
Name: class java.util.Scanner: {(delimiter:\p{javaWhitespace}+)(findStartIndex=1)(match succeed=true)(closed=false)}
In c musste man manchmal die Eingabe von Zeilenumbrüchen mit einem "flush" "bereinigen".
Gibt es sowas in die Richtung auch bei Java, oder ist mein Problem wo anders zu Suchen?
toString() ist liest keinen String ein sondern liefert die String-Repraesentation des Objekts (bei jedem Objekt) und die wird da ausgegeben - gemeint ist wohl next()
Wie hast Du es geschafft in dem Forum diesen Thread zu eröffnen, wenn es offensichtlich zu schwer war mit Hilfe von google die Java-Docs zu finden und Dir selbst zu helfen?
@rabite: Oh man. Das war es. War ja wieder klar, dass es so n dummer Fehler sein musste.
@Pillewutz:
Das war ganz einfach: Ich hab mir ca 30 Google-Ergebnisse durchgelesen. Rausgefunden, dass es in Java anscheinend an die 10 Zeilen Code bedarf um einfach nur eine Integer-Zahl einzulesen (in c ist das genau EINE Zeile) nur um nach dem 31 Ergebnis dann auf die Scannerklasse zu treffen.
Nach 15 weiteren erfolglosen Ergebnissen bezüglich "zweite Eingabe wird übersprungen" hatte ich keinen Bock mehr und hab hier einen Threat aufgemacht, in dem ich innerhalb von 2 Zeilen eine Lösung gefunden habe, die GENAU auf mein Problem zutrifft.
In diesem Fall war es leider meine Dummheit und ich entschuldige mich dafür, dass dich deswegen belästigen musste.
Das war ganz einfach: Ich hab mir ca 30 Google-Ergebnisse durchgelesen. Rausgefunden, dass es in Java anscheinend an die 10 Zeilen Code bedarf um einfach nur eine Integer-Zahl einzulesen (in c ist das genau EINE Zeile) nur um nach dem 31 Ergebnis dann auf die Scannerklasse zu treffen.
Soll jetzt kein Programmiersprachen-War auslösen, aber da sehe ich zur Zeit die schwäche von Java, zu viele Leute schreiben genau die gleichen Funktionen. Bevor es bei C zum ANSI-Standard kam, war es dort nicht wirklich anders.
Es ist ja schön, wenn es leicht möglich ist neue Sachen in die Sprache ein zu binden und gleich zu dokumentieren. Aber die Sprache wird dadurch auch unnötig aufgebläht und zerstückelt.
Ok, sehr wahrscheinlich kenne ich mich zu wenig aus in der Java-Szene. Mir ist es eben nur aufgefallen dass mir von anderen Leuten die Java-Programmieren, meist erzählt wird, dass es für eine Aufgabe eben sehr viele verschiedene Funktionen gibt, die alle annähernd das gleiche machen. Aber ich lasse mich gerne belehren und ziehe mein Statement zurück.
Zitat:
Zitat von m9716
Aber wem erzähle ich das. Du weißt noch nicht mal was Objektorientierung ist, willst aber in der Java-Szene mitreden ...
Ich habe ich doch schon mal gebeten mir den unterschied aus deiner Sicht zu erklären.
Und in dem bereich habe ich eine Referenz angegeben, nämlich GTK+. Dies ist ein in C programmierter und "Objekt Orientierter" Code.
Also, ich würde mich über eine PN freuen .
Was mich ehrlich gesagt verwirrt hat, ist die Tatsache, dass ich für ein solch einfaches Problem 10 verschiedene Lösungen bekomme und nicht weiß, was ich denn jetzt wirklich verwenden soll...
Hallo, auch wenn es nicht zum Thema von oben passt...zumindest nicht ganz...habe ich ne Frage.
Habe den JDK installiert und auch Java(TM) ME Platform SDK 3.0.
Danach schrieb ich wie gewohnt mein Programm (was allerdings noch einiges an überarbeitung und verfeinerung braucht)
Wenn ich das nun kompillieren will kommt im Output folgendes:
ERROR - Ant is misconfigured and cannot be run.
java.lang.IllegalStateException: zip file closed
at java.util.zip.ZipFile.ensureOpen(ZipFile.java:595)
at java.util.zip.ZipFile.getInputStream(ZipFile.java: 341)
at java.util.jar.JarFile.getInputStream(JarFile.java: 403)
at sun.net.[ Link nur für registrierte Mitglieder sichtbar. Bitte einloggen oder neu registrieren ])
at sun.misc.URLClassPath$Loader$1.getInputStream(URLC lassPath.java:553)
at sun.misc.Resource.cachedInputStream(Resource.java: 77)
at sun.misc.Resource.getByteBuffer(Resource.java:160)
at java.net.URLClassLoader.defineClass(URLClassLoader .java:436)
at java.net.URLClassLoader.access$100(URLClassLoader. java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java: 361)
at java.net.URLClassLoader$1.run(URLClassLoader.java: 355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.j ava:354)
at org.apache.tools.ant.module.bridge.AntBridge$MainC lassLoader.findClass(AntBridge.java:623)
at java.lang.ClassLoader.loadClass(ClassLoader.java:4 23)
at java.lang.ClassLoader.loadClass(ClassLoader.java:4 10)
at java.lang.ClassLoader.loadClass(ClassLoader.java:3 56)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at org.apache.tools.ant.module.bridge.AntBridge.creat eAntInstance(AntBridge.java:287)
at org.apache.tools.ant.module.bridge.AntBridge.getAn tInstance(AntBridge.java:26
at org.apache.tools.ant.module.bridge.AntBridge.getIn terface(AntBridge.java:257)
at org.apache.tools.ant.module.run.TargetExecutor.run (TargetExecutor.java:497)
at org.netbeans.core.execution.RunClassThread.run(Run ClassThread.java:151)
was hab ich nur wieder falsch gemacht? Das passiert mir andauernd! Meist is es nur ein ganz simpler Klick oder ein Häckchen was ich falsch gesetzt habe..
@oetty:
Das ist kein Problem deines Codes sondern Deiner Buildumgebung.
Ant ist für Java sowas wie Make für C/C++.
Brauchst du nicht wirklich, einfach mal in der kommanozeile javac ........ eingebeun und gut ist.
Hast deine IDE, wahrscheinlich nicht richtig konfigurert, und diese benutzt ant dann falsch.
Und beim nächste mal nen neuen Thread aufmachen, bei Threadhijaking haste schlechte chancen das dir jemand antwortet(werd dich in zukunft dann auch ignorieren) und es erschwert die suche im Forum sollte jemand mal das gleiche problem haben.
@slahn,Mephist0:
Wiso soviele Zeilen für einen Integer?
Alles was in Java von stdin kommt ist ein string, einfach
string einlesen, nach integer-casten, wenn fehler dann nochmal, eingabe verlange.
da kommen nie im leben 10 zeilen zusammen, und von wege flamewar, will ich auch nicht, bin noch nichtmal javafreundlich, aber was so ist das ist so
__________________
Meine Rechtschreibfehler dürft ihr gerne behalten.
------------------------------------------------------------
Füttere keine Trolle!->Also unterstütz auch nicht Appel.
@sirleo:
ja das problem war nur das ich schon nen thread erstellt hatte aber aus irgendwelchen gründen wurde der gelöscht oder nicht richtig akzetiert.
Ja, das hab ich mir aber auch schon fast gedacht das es and der rbuildumgebung liegt...
hab mal nen bisschen dran gebastelt und jetzt klappt alles wieder
Danke
10 Zeilen sehe ich als zuviel, bei mir hat im Regelfall immer ausgereicht:
Code:
private boolean checkStringIsInteger(char[] list)
{
for(int i = 0; i < list.length; i++) if(!Character.isDigit(list[i])) return false;
return true;
}
Sind dann 4, geht vielleicht auch noch irgendwie kürzer, aber liefert was gewünscht ist.
Alternativ geht natürlich auch casten und dann try->catch, aber wieso Exceptions zulassen wenn man es vermeiden kann.