[Java] Fehlersuche - java.util.Scanner

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von hoodeknoode, 11. Mai 2010 .

Schlagworte:
  1. 11. Mai 2010
    Fehlersuche - java.util.Scanner

    Habe folgende aufgabe:

    Der Benutzer soll beliebig viele –aber mindestens zwei (!) -ganze Zahlen eingeben können. Gibt er ab der dritten Zahl eine 0 ein, so bricht die Eingabe ab und die bislang zweitgrößte aller eingegebenen Zahl wird ausgegeben. Entwickeln Sie einen Algorithmus zur Lösung des Problems. Geben Sie auch ein Java-Programm an, das Ihren Algorithmus implementiert.

    Hier mein Code:


    package ersteProgramme;

    import java.util.Scanner;

    public class Programm17 {

    /**
    * @param args
    */
    public static void main(String[] args) {


    Scanner eingabe = new Scanner(System.in);


    int x = 1;
    int z = 0;
    int y = 0;
    int timer = 0;

    while(x!= 0 | timer < 2){
    System.out.print("Zahl eingeben: ");
    x = (new Integer(eingabe.next()));

    if(x > z){
    z = x;
    if((x > y) && (x < z)){
    y = x;
    }
    }

    timer++;
    }

    System.out.print("die zweitgrößte Zahl war: " + (Integer.toString(y)));
    }


    Wo liegt hier der fehler ???

    Gruß
     
  2. 11. Mai 2010
    AW: Fehlersuche - java.util.Scanner

    Code:
    System.out.print[COLOR="SandyBrown"]ln[/COLOR]("die zweitgrößte Zahl war: " + (Integer.toString(y)));
    
    da brauchst du des Integer.toString nicht, kannst gleich schreiben ""+y
    und es heißt System.out.println();
    das ln fehlt!

    BTW für Sourcecode bitte den code-tag benutzen!!!
     
  3. 11. Mai 2010
    AW: Fehlersuche - java.util.Scanner

    Code:
    import java.util.*;
    
    public static void main(String[] args) {
     
     int[] temp = new int[1000];
     boolean end = false;
     Scanner scanner = new Scanner(System.in);
     
     for (int i = 0; !end; i++) {
     System.out.print("Zahl eingeben: ");
     temp[i] = scanner.nextInt();
     if ((temp[i] == 0) && (i > 1))
     end = true;
     }
     Arrays.sort(temp);
     System.out.println("Die zweitgroesste Zahl war: " + temp[temp.length-2]); 
    }
    Wenn du beliebig viele Zahlen einlesen willst bietet es sich an Arrays zu nehmen, am besten ArrayList wenn die Größe unbestimmt ist. Da kannst du auch einfach die Sortiermethode benutzen

    print() gibts auch, macht halt keinen automatischen Zeilenwechsel
     
  4. 11. Mai 2010
    AW: Fehlersuche - java.util.Scanner

    @Calyx

    du hast in der Aufgabe überlesen, dass die zweitgrößte Zahl gesucht ist. Richtig wäre deshalb:

    Code:
    System.out.println("Die zweitgroesste Zahl war: " + temp[temp.length-[highlight]2[/highlight]]);
    
    .length gibt die Länge x der ArrayList wieder. Die Indizes (also Positionen) der ArrayList gehen von 0 bis x-1. Oft für "Schusselfehler" verantwortlich.

    Aber sonst stimme ich dir zu, dass es mit Arrays am effektivsten lösbar ist. Ich hoffe das kommt jetzt nicht "kleinkrümlig" rüber, wollt nur drauf aufmerksam machen ;>
     
  5. 11. Mai 2010
    AW: Fehlersuche - java.util.Scanner

    Stimmt, is vollkommen richtig...mal wieder nicht aufgepasst ^^
     
  6. 14. Mai 2010
    AW: Fehlersuche - java.util.Scanner


    ahhhhhhhhhhhhhhhhhhhhh also wenn er beliebig viele zahlen einlesen will bietet sich schonmal alles an nur kein Array Arrays haben eine feste größe die nicht überschritten werden darf

    was du meinst ist sicher eine liste, wie eine arraylist (das ist immernoch kein array sondern eine liste, auch wenn sie nette möglichkeiten bietet elemente an bestimmten stellen zu verwenden)

    zudem ist erst einlesen dann sortieren ziemlicher laufzeit overkill

    ansich brauchst du nur zwei variablen:

    den kleinsten und den zweitkleinsten wert, den du abspeicherst

    für jeden eingelesenen wert guckst du nun:

    ist der wert kleiner als der kleinste wert? -> kleinsten wert auf zweitkleinsten wert setzen und neuen wert auf kleinsten setzen

    ist der wert nicht kleiner als der kleinste wert aber kleiner als der zweitkleinst, so wird der neue wert zum zweitkleinsten
     
  7. 14. Mai 2010
    AW: Fehlersuche - java.util.Scanner

    Er kann schon arrays benutzen, wenn er sie immer vergrößert falls gebraucht, das gleiche macht auch arraylist
     
  8. 14. Mai 2010
    AW: Fehlersuche - java.util.Scanner

    Naja die ArrayList ist "unter der Haube" eben eine liste, und kein Array - aber in der Benutzung is das wohl egal ...
     
  9. 14. Mai 2010
    AW: Fehlersuche - java.util.Scanner

    also arraylist kann er ja noch implementieren wenn er will, is net viel arbeit und steht ja auch da dass das besser wär wegen dynamischer größe ^^

    sicherlich kann man das laufzeittechnisch mit if besser lösen aber so hast halt alle gemachten eingaben parat und musst net viel code verändern wenn du an nen anderen wert willst.
     
  10. 14. Mai 2010
    AW: Fehlersuche - java.util.Scanner

    Bis auf ein paar kleine Tippfehler ist dein Code ok,
    hab mal eine entsprechende Aufgabe in der Schule aufbekommen:

    Code:
     public static int getSecondBiggest()
     {
     Scanner s = new Scanner(System.in);
     
     int first = -2147483648, // Die mimimal für Int mögliche Zahl
     second = first, // Gleichsetzen
     inputcount = 0; // Anzahl der getätigten Eingaben
     
     boolean exit = false;
     String input = null;
     
     while(!exit && inputcount < 2)
     {
     if (inputcount < 2)
     System.out.print("Bitte geben Sie eine Zahl ein: ");
     else
     System.out.print("Bitte geben Sie eine Zahl ein (0 zum Beenden): ");
     
     try {
     int tInput = Integer.parseInt(s.next());
     if (tInput == 0)
     if (inputcount < 2)
     System.out.println("Man muss zuerst 2 Eingaben tätigen bevor man beenden kann!");
     else
     exit = true;
     else
     if (tInput > first)
     {
     second = first;
     first = tInput;
     }
     } catch (Exception e)
     {
     System.out.println("Bitte nur Zahlen eingeben!");
     }
     }
     
     return second;
     }
    
    
    Das war bei mir halt mehr, daher auch eine eigene Methode die dies erledigte, kannst du aber so direkt in die Main reinpasten. Versuch dich lieber in den Code einzuarbeiten statt den einfach CP ins Programm zu schmeissen, für fehlerfreien Code kann ich nicht garantieren.

    hf, live
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.