Java int == garnichts?

Kai-133

Lieutenant
Registriert
Feb. 2009
Beiträge
715
Hallo liebe CB Gemeinde,

für die Schule muss ich in Java Programmieren. Leider bin ich blutiger Anfänger. Da mir verzweifeltes Googeln nicht geholfen hat wende ich mich nun an euch (meine letzte Rettung :).

Ich habe nämlich folgendes Problem:
In meinen Programm gibt es eine Eingabe von einem Int.
Man hat aber auch die möglichkeit irgendeinen Schrott einzugeben und falls dieses der Fall ist soll das Programm reagieren. Das ganze soll dann so aussehen:
Code:
int eingabe;

eingabe=IO.readInt("Bitte geben Sie eine Nummer ein: ");

[...]

else if(!(eingabe == garnichts)){


}

Ich weiß leider nicht ob das ganze auch so geht, wie ich mir das vorgestellt habe und den Wert "garnichts" habe ich leider auch nicht gefunden.

Ich danke im vorraus

Gruß Kai
 
Habe ich das richtig verstanden ?

Du möchtest das wenn man zu Eingabe aufgefordert wird und dort z.B. eine Zeichenkette oder gar nichts eingegeben wird, dass darauf reagiert wird ?
 
genau davor sind schon if und else if klammern, die bei bestimmten zahlenketten reagieren
 
Eingabe ist eigentlich immer ein String. Zuerst kannst du mit eingabe == "" also leerer String die "keine Eingabe" abfangen. Später machst du mit try-catch einen Integer-Cast und kannst damit falsche Eingaben, die keinen int-Werte sind abfangen.
Eventuell kanst du in deinem Fall auch über ein Switch nachdenken und dies mit dem Default-case lösen
 
Und wie sieht das dann aus? try-catch und Intenger-Cast hab ich noch nie gehört xD

Sowas vill?

Code:
int eingabe;
string eingabe2 = "";

eingabe=IO.readInt("Bitte geben Sie eine Zahl ein: ");

[...]

else if{

eingabe2=eingabe;
}

else if(!(eingabe == "")){

}
 
Zuletzt bearbeitet:
so kompliziert es sich vllt am Anfang anhört, eigentlich ist es ganz einfach. Aber leider muss man da durch :D

Try-catch
Dient dazu eine Funktion auszuführen, und wenn es einen Fehler gibt, einen bestimmten Fehler ausszugeben. Wichtig beim Casting, da wenn die Eingabe nicht konvertierbar ist - z.b. "foobar" ist nicht in in Integer konvertierbar - ein fehler ausgegeben wird.
http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Exception.htm#03
Casting
Dient dazu die unterschiedlichen Typen zu konvertieren. Deine Eingabe ist ein ganz normaler String. Damit kann Java aber noch rechen. Dazu musst du diese Eingabe erst in eine Integer-Zahl konvertieren.
http://www.programmersbase.net/Content/Java/Content/Tutorial/Java/Datatype.htm#03
 
Zuletzt bearbeitet:
Ich weiß nicht, ob readInt() überhaupt das ist, was du suchst.
readInt() nimmt lediglich die ersten vier Bytes eines Inputstreams und interpretiert diese als einen Integer-Wert.

Es gibt da die Methode parseInt in der Klasse Integer, die einen String parsed und dir einen Integer zurückgibt. Falls das Vorhaben einen Fehler haben sollte, schmeißt die Methode eine NumberFormatException.

Code:
  InputStreamReader isr = new InputStreamReader(System.in);
  BufferedReader br = new BufferedReader(isr);

  System.out.print("Bitte geben Sie eine Nummer ein: ");
  String eingabe = br.readLine();

  int zahl = Integer.parseInt(eingabe);
 
na die erste elseif ist noch falsch geschrieben. zudem würde ich die "" - Keine Eingabe an den Anfang deines if-Blocks setzen, damit er gleich am Anfang abgefangen wird.

@Whiz-zarD: genau. Du beschreibst in deinem Beispiel das Casting. Die exception sollte noch in einem try-catch-block abgefangen werden, dann passt alles :D
 
Nein meine Eingabe ist ein Int die Eingabe (String) wird in der Methode zum Int gemacht

Code:
eingabe=IO.read[B]Int[/B]("HuHu: ");

Aus der IO

Code:
// Einlesen eines int
  public static int readInt() {
    try {
      BufferedReader input = 
        new BufferedReader(new InputStreamReader(System.in));
      String eingabe = input.readLine();
      Integer String_to_int = new Integer(eingabe);
      return String_to_int.intValue();
    }
    catch (Exception e) {
      return 0;
    }
  }
 
Zuletzt bearbeitet:
Beispiel (müsstest du natürlich in deine bisherige Struktur übertragen):
Code:
    public static void main(String[] args)
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
        String input = null;
        try
        {
            System.out.print("Bitte geben Sie etwas ein!:");
            // Erst mal Eingabe akzeptieren, egal was da kommen mag
            input = reader.readLine();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        
        // Eingabe hat stattgefunden und es wurde auch mindestens ein Zeichen eingegeben
        if (input != null && !input.isEmpty())
        {
            System.out.println("Eingabe war:" + input);
            /*
             * Darüber kann man nun streiten. Eigentlich sollte man try und catch nicht
             * unbedingt zur Flusssteuerung verwenden, aber für solch einfache Fälle
             * ist das sicher besser, als aufgeblähte Überprüfung, ob da wirklich eine
             * Zahl steht, bevor man parst.
             */
            try
            {
                int number = Integer.parseInt(input);
                System.out.println(number);
            }
            catch (NumberFormatException e)
            {
                // Das war wohl keine Zahl, die da eingegeben wurde
                System.out.println("Das war keine Zahl!");
            }
        }
    }
 
So hier mal mein code:

Code:
do{

i++;

artikel=IO.readInt("Bitte geben Sie ihre " +i +". Artikelnummer ein : ");


      if(artikel==510){

      a1++;
      }

      else if(artikel==520){

      a2++;
      }

      else if(artikel==530){

      a3++;
      }

      else if(artikel==540){

      a4++;
      }
      
       //Fehlerhafte Einagbe?
       //else if(!(artikel == "")){

       //Damit die Schleife weiterläuft
       //artikel = 510;

       //System.out.println("Diese Artikelnummer ist und leider nicht bekannt");
       //}


    // Bei einem leeren Feld oder einer falschen Eingabe wird die Eingabe beendet
    }while(510 == artikel || 520 == artikel || 530 == artikel || 540 == artikel);
 
ach, habt ihr da selbst eine readInt() gebastelt?
Das hätte man auch mal sagen sollen, da es in der Klasse DataInputStream ebenfalls eine readInt() Methode existiert.

Code:
eingabe=IO.readInt("Bitte geben Sie eine Nummer ein: ");
Das dürfte eigentlich gar nicht funktionieren, da euer readInt() überhaupt keine Parameter besitzt.

Durch das Return kannst du ja sehen, was er zurück gibt, wenn es nicht klappt: 0.
 
Whiz-zarD schrieb:
Durch das Return kannst du ja sehen, was er zurück gibt, wenn es nicht klappt: 0.

und wenn jemand ne 0 eingibt, würde man sie falsch interpretieren.
Mit dem aktuellen Code ist die Funktionalität unmöglich umsetzbar.

Lösungansatz: statt in readInt die Exception abzufangen leitest du sie weiter an den Aufrufer, der sie dann behandelt:
PHP:
try {
  eingabe=IO.readInt("Bitte geben Sie eine Nummer ein: ");
} catch(IOException e) {
  // keine Eingabe
}
 
Man ist das kompliziert... Puh xD

Ok ich lass das jetzt raus (bin zu blöd dafür :) )

Trotzdem Danke

Gruß Kai
 
Zuletzt bearbeitet:
Naja, das erscheint dir nur kompliziert, weil du bisher nicht auf diese Weise denken musstest. Rede dir am besten nicht von Anfang an ein, das wäre Raketenwissenschaft, denn es ist wirklich nicht kompliziert sondern alles logisch und begründbar.

Aber wenn du das nur machen musst und eigentlich gar kein Interesse daran hast, dann wird das einfach nur ätzend für dich sein. :)
 
Nene das macht mir schon SPaß und wnen ich die Sache Sehr gut mache krieg ich auch ne 1. , aber das ist weit über unserem Schulstoff xD
 
Einlesen von Daten kann man mit einem Scanner machen (seit Java 5):
Code:
Scanner scanner = new Scanner(System.in);
int zahl;
if(scanner.hasNextInt()) {  // scanner prüft, ob eine Zahl eingegeben wurde
  zahl = scanner.nextInt(); //scanner liest zahl
} else {
  System.out.println("Fehler! Keine Zahl eingegeben! Zahl wird auf 0 gesetzt!");
  zahl = 0;
}
Das schöne am Scanner ist, dass man gleich mehrere Werte auslesen kann:
Code:
int zahl2 = scanner.nextInt();
int zahl3 = scanner.nextInt();
Der Code liest zwei Zahlen ein, die durch ein Leerzeichen oder ein "Enter" getrennt sind.

Ergänzung: Als mögliche Lösung für das Einlesen einer Zahl, kann man folgenden Code verwenden:
Code:
Scanner scanner = new Scanner(System.in);
int zahl;

System.out.print("Bitte eine Zahl eingeben: ");
while(!scanner.hasNextInt()) { // scanner prüft, ob eine Zahl eingegeben wurde
     scanner.nextLine(); // scanner verwirft die Eingabe
     System.out.print("Fehler! Bitte eine Zahl eingeben: ");
}
zahl = scanner.nextInt();

System.out.println("Zahl: " + zahl);
Das Programm wartet solange, bis etwas eingegeben wurde.
Ist die Eingabe keine Zahl, so wird die Eingabe verworfen und erneut nach einer Zahl gefragt.
Ist die Eingabe eine Zahl, so wird die Zahl zurückgegeben und in die Variable zahl gespeichert und anschließend ausgegeben.
 
Zuletzt bearbeitet:
Wieso machst du nicht einfach deine Fälle, wie du es hier gemacht hast:

if(artikel==510){

a1++;
}

else if(artikel==520){

a2++;
}

else if(artikel==530){

a3++;
}

else if(artikel==540){

a4++;
}

und fügst dann noch einen else fall hinten ran. wenn also keine gültige eingabe gemacht wurde, fällt es in den else fall und dort sagst du dann einfach, das die eingabe ungültig war.
 
@Shagg Das Problem ist ja, wenn man etwas Ungültiges eingibt bekommt man 0 zurück. Das passiert auch, wenn man die Eingabe beenden möchte (Sprich einfach nur Enter drücken)

Deswegen kann ich nicht sagen, dass er merken sall, dass man z. B. "kjadhsdwahi&&&$$&" eingegeben hat, weil man im enteffect eh 0 wiederbekommt.

PS: Ich guck mir das mal mit dem scanner an das sieht schön übersichtlich aus :)

@Ack der III Bei keiner Eingabe also 0 soll sich die Eingabe aber beenden
 
Zuletzt bearbeitet:
Kai-133 schrieb:
@Shagg Das Problem ist ja, wenn man etwas Ungültiges eingibt bekommt man 0 zurück. Das passiert auch, wenn man die Eingabe beenden möchte (Sprich einfach nur Enter drücken)

...

Code:
// Einlesen eines int
  public static int readInt() {
    try {
      BufferedReader input = 
        new BufferedReader(new InputStreamReader(System.in));
      String eingabe = input.readLine();
      Integer String_to_int = new Integer(eingabe);
      return String_to_int.intValue();
    }
    catch (Exception e) {
      [b]return 0;[/b]
    }
  }

Deswegen kann ich nicht sagen, dass er merken sall, dass man z. B. "kjadhsdwahi&&&$$&" eingegeben hat, weil man im enteffect eh 0 wiederbekommt.

...

@Ack der III Bei keiner Eingabe also 0 soll sich die Eingabe aber beenden

Ja aber das 0 zurück kommt bei ungültigen Eingaben (sprich wenn irgend 'ne Exception fliegt) das hast du doch selbst so vorgegeben (siehe der fett markierten Stelle im Code).

Wenn man die Exception "richtig" behandelt, hat man es ja selbst in der Hand was wann zurückkommt. Nebenbei sollte man lieber Integer.parseInt benutzen als den Stringkonstruktor von Integer, der kann nämlich auch nicht-numerische Zeichen in Integer umwandeln ;)
 
Zurück
Oben