2017-09-12 15 views
-2

Ich muss ein Programm schreiben, das Benutzer auffordert, positive Ganzzahlen mit einem Sentinel-Wert von -1 einzugeben. Das Programm muss die eingegebenen Ganzzahlen in einer einzigen Zeile anzeigen (ohne -1) und dann die Summe der eingegebenen Ganzzahlen anzeigen. Ich habe etwas gesucht und es sieht so aus, als müsste ich eine Liste erstellen, in der die Zahlen gespeichert werden, denke ich? Ich bin noch ziemlich neu und weiß nicht, wie ich das machen soll. Ich habe versucht zu googeln, aber es hat mich nur verwirrt. Hier ist mein Code so weit:Benutzereingaben aus einer while-Schleife anzeigen

import java.util.Scanner; 

public class InputSum { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter positive integers. Enter -1 to stop. "); 
     int number = scan.nextInt(); 
     int sum = 0; 
     while (number != -1) { 
      if (number < -1) { 
       System.out.println("Invalid input. Try again."); 
      } else 
       sum += number; 
      number = scan.nextInt(); 
     } 
     System.out.println("The sum: " + sum + "."); 
    } 
} 

Übrigens ist dies mein erstes Mal so tut mir leid, wenn ich etwas falsch gemacht habe!

+1

Hier ist das Tutorial auf Sammlungen zu speichern: https://docs.oracle.com/javase/tutorial/collections/. Aber Sie brauchen keine Liste von ganzen Zahlen, um das zu tun. Sie können einfach einen String erstellen und die gelesenen Zahlen mit dem String verketten und dann den String drucken, nachdem die letzte Nummer eingegeben wurde. –

+0

Setzen Sie die Zahlen in eine ArrayList oder einen ähnlichen Container und wiederholen Sie dann die Zahlen am Ende. – Carcigenicate

+0

Dude, dieses Zeug verwirrt mich gerade so sehr. – Richard

Antwort

0

Sie können es auf diese Weise tun, um eine do-while Anweisung:

import java.util.Scanner; 

public class InputSum { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter positive integers. Enter -1 to stop. "); 
     int number = 0; 
     int sum = 0; 
     StringBuilder sb = new StringBuilder(); 
     do{ 
      try { 
       number = scan.nextInt(); 

       if(number < -1){ 
        System.out.println("Invalid input. Try again."); 
       }else if(number > -1){ 
        sum += number; 
        sb.append(number + " "); 
       } 

      } catch (InputMismatchException e) { // handle invalid integers 
       System.out.println("Invalid input. Try again."); 
      } 
     }while (number != -1); 

     System.out.println("Numbers entered: " + sb.toString().trim() + "."); 
     System.out.println("The sum: " + sum + "."); 
    } 
} 

Dies wird iteriert, bis der Benutzer betritt -1. Schließlich zeigt es die Summe Ihrer positiven ganzen Zahlen und der eingegebenen Zahlen. Ich verwende eine StringBuilder, um die Nummern zu sammeln. Du könntest eine Liste verwenden, wie du es auch gesagt hast, aber ich finde es einfacher.

EDIT

Hier ist eine andere Möglichkeit, es ohne die Try-Catch-Block zu tun:

public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     System.out.println("Enter positive integers. Enter -1 to stop. "); 
     int number = 0; 
     int sum = 0; 
     StringBuilder sb = new StringBuilder(); 
     do{ 
      if(scan.hasNextInt()){ 
       number = scan.nextInt(); 

       if(number < -1){ 
        System.out.println("Invalid input. Try again."); 
       }else if(number > -1){ 
        sum += number; 
        sb.append(number + ", "); 
       } 
      }else{ 
       System.out.println("Invalid input. Try again."); 
       scan.next(); // reset the scanner 
      } 
     }while (number != -1); 

     System.out.println("Numbers entered: " + sb.delete(sb.length() - 2, sb.length()) + "."); 
     System.out.println("The sum: " + sum + "."); 
} 

Da diesmal in den Kommentaren erwähnt ich hasNextInt bin mit zu überprüfen, ob die Eingabe eine gültige Ganzzahl vor dem Lesen. Dies dient zum Verhindern von Ausnahmen, die ausgelöst würden, wenn der Benutzer ungültige Ganzzahlen eingibt. Ich habe die Zahlen auch durch Kommas getrennt.

+0

Muss ich den Try-Catch-Teil verwenden, wenn ich den String-Builder verwende? Wir sind nicht im Unterricht darüber gegangen, also bin ich mir nicht sicher, ob er es akzeptieren wird, wenn es das hat. – Richard

+0

@Richard der try-catch-Block, nur um unerwünschte Ergebnisse zu verhindern, wenn der Benutzer eine ungültige Ganzzahl (wie 4.65, zehn, 2o) eingibt. In diesen Fällen löst die Methode [nextInt] (https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#nextInt()) in der Scanner-Klasse eine "InputMismatchException" aus. Eine Alternative zu dem try-catch-Block könnte die Methode [hasNextInt] (https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#hasNextInt()) sein, um die Eingabe vor dem Lesen des Wertes mit der 'nextInt' Methode –

+0

@Richard Es wird verwendet, um fehlerhafte Eingabe durch den Benutzer zu behandeln. Wirklich, dein erstes Beispiel sollte es benutzen, aber wenn sie es noch nicht gelehrt haben, würde ich es weglassen. Wenn der Benutzer eine falsche Eingabe eingibt, stürzt Ihr Programm ab. Der try ... catch verhindert das. – Carcigenicate

0

können Sie einen Stringbuilder verwenden, um die Zahlen

import java.util.Scanner; 

public class InputSum { 
public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter positive integers. Enter -1 to stop. "); 
    int number = scan.nextInt(); 
    int sum = 0; 
    StringBuilder sb = new StringBuilder(); 
    while (number != -1) { 
     if (number < -1) { 
      System.out.println("Invalid input. Try again."); 
     } else 
      sum += number; 
     number = scan.nextInt(); 
     sb.append(number + " + "); 
    } 
    System.out.println("The sum: " + sum + "."); 
} 

}

Verwandte Themen