Eingabe per Tastatur.



  • Hallo,

    ich beschäftige michs eit kurzem mit Java hab auch diverses Material dazu aber irgendwei versteh ich da was nicht oder es scheint komplizierter als gedacht ...

    Kann auch sein das ich noch nicht wirklich in objekten etc. denke 😉

    Mir geht es speziell um die Eingabe von werten. Die ausgabe ist ja sehr einfach gestalltet durch "System.out.println();" aber die eingabe über Tatstatur anscheinet nicht ... ichd acht schon es reiche eine variable zu definieren mit dem entsprechendem typ udn die zeile so abzuändern: "int a; System.in.readln(a);" aber das brachte keinen Erfolg...

    Die bücher die ich habe lassen nichts verlauten über soetwas, bzw. die beispielprogramme haben alle feste werte für variablen.

    Ich wollt aber mal rumspielen und vielleicht einen kleinen taschenrechner erstellen oder sowas, um mit der syntax der fallunterscheidung und bedingungen wie auch der schleifen zu üben.

    Also wenn mir da wer einen Wink oder ein konzept geben kann wie das geht mit der eingabe via Tastatur wär ich sehr dankbar 🙂

    mfg



  • Hi

    schau mal nach BufferdReader(new InputstreamReader(System.in)); Damit solltest du dann mit readLine() einen string von der console einlesen können. Wenn du zahlen willst, must du die nachträglich parsen. Schau dir dazu die Objecte Integer, Byte, .... aus dem Packet java.lang an.

    fur richtige schreibweise keine gewähr

    gruss Termite

    ps. ist etwas kompliziert in java was von der console einzulesen. vorallem zu verstehen was da genau gemacht wird. Ging mir nicht anders. 😃 Student: "was bedeuten den die ganzen news in der zeile?" Professor : "Schreibt die zeile einfach ab. erklähren werd ich das am ende vom semester." Student grrrrrr



  • ja das ding hab ich auch gefunden, wobei ich es torzdem logischer gefunden hätte mit einem ordinären readln oder sowas ... naja 🙂

    import java.io.*;
    
    public class Zahlenvergleich{
    
      public static void main(String args[]) throws IOException {
       //Variablen
       int i=0;
       int n1Eingabe, n2Eingabe;
    
       BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
    
       //Eingabe
        System.out.print("Name1: ");
         String name1 = eingabe.readLine();
        System.out.print("Name2: ");
         String name2 = eingabe.readLine();
        System.out.println(" ");
    
       do{
    
        do{
        System.out.print(name1 +" gib eine Zahl ein zwischen 1-10: ");
         n1Eingabe = Integer.parseInt(eingabe.readLine());
         if(n1Eingabe==0) break; //Schleifenabbruch
        }while((n1Eingabe >= 11)||(n1Eingabe <= 0));
         if(n1Eingabe==0) break; //Schleifenabbruch, Programmabbruch
        do{
        System.out.print(name2 +" gib eine Zahl ein zwischen 1-10: ");
         n2Eingabe = Integer.parseInt(eingabe.readLine());
         if(n2Eingabe==0) break;
        }while((n2Eingabe >=11)||(n2Eingabe <0 ));
    
       //Auswertung
        if(n1Eingabe > n2Eingabe){
         System.out.println(name1+" hat gewonnen.");
         System.out.println(" ");
        }
         else{
          System.out.println(name2+" hat gewonnen.");
          System.out.println(" ");
         }
         if(n1Eingabe == n2Eingabe){
          System.out.println("Unentschieden");
          System.out.println(" ");
         }
        i++;
       } while(i<=5);
      }
    }
    

    Ich hab mal was getipp zu übungszwecken udn nehm an das die input und output funktion so geht aber gibt es noch was besseres um aus verschachtelten schleifen zu kommen außer break? sowas wie exit oder halt? 🙂 Also das man sofort das brogramm abbricht.



  • Wieso das Rad neu erfinden? java.util.Scanner bietet ein paar "readXXX"-Methoden.



  • Hi

    es gibt auch noch return um die methode / funktion zu beenden.
    Ich persönlich find es unschön wenn eine Methode mehr als einen ausgang hat. Es ist meist auch etwas aufwendiger zu schreiben. dafür einfacherzu debugen, weil man weis, das das programm nur am ende der Methode rauskommt und nicht auch noch irgendwo zwischendrinn abbrechen kann.

    gruss Termite

    ps

    ...
     }while((n1Eingabe >= 11)||(n1Eingabe <= 0));
        if(n1Eingabe!=0) //Schleifen abbruch mal anders rum
        {
          do{
          ...
    
          i++;
        }
       } while ((i<=5)&&(n1Eingabe!=0));
      }
      ...
    

    4 Zeilen geändert und du hast keine probleme mehr damit irgendwie deine schleife zu beenden 😉



  • ab wann ist denn dieses scanner ding in java implementiert also ab welcher version?

    wobei so wirklich weniger istd as auch nicht zu schreiben als mit dem buffer ...

    Ich hab übrigens noch was gefunden ... diese Label-funktion, das scheint auch sowas zu machen... also wenn ein break kommt springt der an das label was ja auch die äußerste schleife wäre und geht somit direkt ans ende ...

    öhm ich nehm an auch wenn da "C++ code" steht das man den Tag auch für Java nehmen kann 😉 da sieht man die einzelnen befehle besser... ansonsten sollte mand as vielleicht mal neutraler fassen als bezeichner 🙂

    import java.io.*;
    
    public class Zahlenvergleich{
    
      public static void main(String args[]) throws IOException {
       //Variablen
       int i=0;
       int n1Eingabe, n2Eingabe, auswahl;
    
       BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
    
       //Eingabe
        System.out.println("*******************");
        System.out.println("* Zahlenvergleich *");
        System.out.println("*******************");
        System.out.println(" ");
        System.out.println("Bitte treffen sie eine Auswahl:");
        System.out.println("Start(0)");
        System.out.println("Exit (1)");
        System.out.print("Auswahl: ");
         auswahl = Integer.parseInt(eingabe.readLine());
    
       programmende:{ //Label (Block)
         while((auswahl!=0)&(auswahl!=1)){
            System.out.print("Auswahl: ");
             auswahl = Integer.parseInt(eingabe.readLine());
           }
    
           System.out.println(" "); //Leerzeilen
    
         switch(auswahl){
          case 0: break;
          case 1: break programmende;
          default:   // Erlaubt nur eine Wiederholung
           System.out.print("Auswahl: ");
            auswahl = Integer.parseInt(eingabe.readLine());break;
         }
    
        System.out.print("Name1: ");
         String name1 = eingabe.readLine();
        System.out.print("Name2: ");
         String name2 = eingabe.readLine();
        System.out.println(" ");
    
        do{
    
         do{
         System.out.print(name1 +" gib eine Zahl ein zwischen 1-10: ");
          n1Eingabe = Integer.parseInt(eingabe.readLine());
          if(n1Eingabe==0) break; //ziel; //Schleifenabbruch
         }while((n1Eingabe >= 11)||(n1Eingabe <= 0));
          if(n1Eingabe==0) break programmende; //Schleifenabbruch, Programmabbruch
    
         do{
         System.out.print(name2 +" gib eine Zahl ein zwischen 1-10: ");
          n2Eingabe = Integer.parseInt(eingabe.readLine());
          if(n2Eingabe==0) break programmende;
         }while((n2Eingabe >=11)||(n2Eingabe <=0 ));
    
        //Auswertung
         if(n1Eingabe > n2Eingabe){
          System.out.println(name1+" hat gewonnen.");
          System.out.println(" ");
         }
          if(n1Eingabe < n2Eingabe){
           System.out.println(name2+" hat gewonnen.");
           System.out.println(" ");
          }
          if(n1Eingabe == n2Eingabe){
           System.out.println("Unentschieden");
           System.out.println(" ");
          }
         i++;
        } while(i<=5);
       }
      }
    }
    

    Also anscheinent gibt es in java keinen konsolen befehl der den bildschirm löscht aber sonst wäre mein Label: programmende... die frage ist ob man sowas benutzen lollte oder eher nicht, von wegen sauberer programmierstil etc.



  • 00Albert schrieb:

    ab wann ist denn dieses scanner ding in java implementiert also ab welcher version?

    Ab Version 1.5.



  • hm, dann müßte das meine engine auch kennen 🙂 na mal sehen ...

    Übrigens kann man irgendwei noch eine fehlerbehandlung machen wenn man eine bereichs überschreitung hat oder einen falschen typ eingibt ... also beispielsweise für einen Int wert einen floar wert eingibt ...

    bis jetzt kommt nur eine fehlermeldung mit programmabruch vom interpreter aber das muß man doch auch irgendwei abfangen können etc. und für seine zwecke nutzen ... zB. das man dann den benutzer auffordert die eingabe erneut zu machen ...



  • Labels ganz böse. Böse ist das, ganz ganz böse. Labels machen sicher sinn. nur hab ich sie bisher auch noch nicht gebraucht ( beim java programieren, ins ASM kommt man ja nicht drum rum 😃 ) In der anwendung wie du sie verwendest leider nicht wirklich.

    ergänzmal dein prog um folgende zeilen. damit fängst du exceptions.

    public static void main(String args[])  
     {
       try
       {
       ...
       }
       catch(Exception e)
       {
         e.printStackTrace();
       }
     }
    

    wenn du sowas z.B. um deinen Integer.parseInt() aufruf schreibst, und die NumberFormatException fängst, kannst du z.B. die eingabe wiederholen lassen.


Anmelden zum Antworten