2015-10-08 2 views
1

Je suis dans un cours de programmation java de bas niveau, et j'ai de la difficulté à trouver quelque chose que mon professeur nous a assigné. À l'origine, nous avons créé un programme qui ajoutait des entiers placés dans un arrayliste. Elle nous a alors demandé de le rendre aussi convivial que possible, sans avoir une quantité spécifique d'entiers que l'utilisateur entre. Alors je suis venu avec ceci:Insight avec la fin d'une boucle en appuyant sur la touche Entrée en Java

public class CalculatorREDONE 
{ 
    public static void main(String[] args) 
    { 

     ArrayList<Integer> numbers = new ArrayList<Integer>(); 

     System.out.println("Enter any numbers you would like to add. "); 
     Scanner input = new Scanner(System.in); 


     do 
     { 
      numbers.add((int) input.nextInt()); //inserting input into the arraylist 
      System.out.println("The sum is " + sum(numbers)); //test output 
     }while(input.hasNextInt()); // I believe this needs to change but I am unsure what it should be 
       System.out.println(sum(numbers)); 
    //My Problem here is that the loop doesn't end, therefore cannot print this output 


      input.close(); 


} 

public static int sum(ArrayList<Integer> list) 
{ 
    int total = 0; 

    for (int i = 0; i < list.size(); i++) 
    { 
     total += list.get(i); 
    } 

    return total; 
} 


} 

Désolé pour le désordre des commentaires, je suis en train de montrer l'un de vous mon état d'esprit derrière ce que je faisais. Merci d'avance à tous ceux qui ont des suggestions!

+0

Avez-vous une question précise? http://stackoverflow.com/help/how-to-ask – shafeen

+0

Oui, je suppose que ma question est, comment puis-je obtenir la boucle do-while pour arrêter la boucle par l'utilisateur en appuyant sur Entrée? Lorsque l'utilisateur appuie sur la touche Entrée, il sort la somme, mais ne quitte pas la boucle. L'utilisateur peut continuer à entrer des entiers et la boucle continue de les ajouter au tableau, les ajoutant ainsi à la somme. – MarkMyWords

Répondre

0

Voyez si cela aide où vous prenez une entrée de l'utilisateur pour terminer le programme.

public class CalculatorREDONE { 

public static void main(String[] args) { 
    List<Integer> numbers = new ArrayList<Integer>(); 
    System.out.println("Enter any numbers you would like to add or -1 to exit"); 
    Scanner input = new Scanner(System.in); 
    // boolean nextAvailable = true; 
    while(true) 
    { 
     String nextVal = input.nextLine(); 
     if(nextVal.isEmpty()) { 
      break; 
     } 
     numbers.add(Integer.parseInt(nextVal)); //inserting input into the arraylist 

     // System.out.println("The sum is " + sum(numbers)); //test output 
    } //while (!input.next().); // I believe this needs to change but I am unsure what it should be 
    System.out.println(sum(numbers)); 
    //My Problem here is that the loop doesn't end, therefore cannot print this output 


    input.close(); 


} 

public static int sum(List<Integer> list) { 
    int total = 0; 

    for (int i = 0; i < list.size(); i++) { 
     total += list.get(i); 
    } 

    return total; 
} 

}

+0

Bien que cela aiderait en fait, je me demandais s'il était possible de le rendre plus facile pour l'utilisateur. Plutôt que de taper un nombre négatif, ils peuvent simplement appuyer sur Entrée. Je l'ai fait fonctionner, mais la boucle ne finira pas. L'utilisateur peut simplement continuer à entrer des valeurs. Merci quand même! Si je ne peux pas l'obtenir d'une autre façon, je vais certainement le faire! – MarkMyWords

+0

J'ai modifié la réponse pour vérifier l'entrée. Cependant, puisque la ligne est en cours de lecture, vous devrez peut-être inclure une expression rationnelle pour valider l'entrée pour les valeurs entières uniquement ou il n'y a pas d'exception NumberFormatException. – Saurav

+0

Je ne sais pas si je suis supposé aller aussi loin avec ça, étant donné que je ne sais même pas ce que cela veut dire. Merci pour vos suggestions et votre aide si! Je l'ai essayé quand même, et j'ai eu une erreur pas dans le code, mais avec Eclipse lui-même, "Erreur: Une erreur JNI s'est produite, veuillez vérifier votre installation et réessayer." J'apprécie la suggestion cependant! Je vous remercie! – MarkMyWords

0

Essayez ceci - il faut l'entrée comme une chaîne, vérifie la longueur. Si l'utilisateur vient frapper, la longueur ne sera pas supérieure à zéro. Cela attrape l'exception de nombre de parseInt en confirmant que l'utilisateur a terminé leur liste.

Notez que je n'ai pas inclus votre portion de somme car elle n'était pas pertinente à la question de la rupture de la boucle. Vous devez ajouter à nouveau

import java.util.Scanner; 
import java.util.ArrayList; 

public class CalculatorREDONE 
{ 
    public static void main(String[] args) 
    { 

    ArrayList<Integer> numbers = new ArrayList<Integer>(); 

    System.out.println("Enter any numbers you would like to add. "); 
    Scanner input = new Scanner(System.in); 

    String userinput = "xx"; 
    int nextnum = 0; 
    while (userinput.length() > 0) { 
     try { 
      userinput = input.nextLine(); 
      nextnum = Integer.parseInt(userinput); 
      numbers.add(nextnum); 
      System.out.println("Taken"); 
     } catch (NumberFormatException e) { 
      System.out.println("Inputs complete"); 
     } 
    } 

    System.out.println(numbers); 

     input.close(); 
    } 
} 
+0

J'ai mis "Taken" dedans juste pour que l'utilisateur (ou moi pour les tests) confirme que le numéro a été ajouté à la liste. Il peut être supprimé ou remplacé par un message différent. Même chose avec "Entrées terminées" qui apparaîtra la première fois que l'utilisateur frappe juste entrer. Je devrais noter que ceci n'arrêtera pas la liste si l'utilisateur place quelque chose comme "fin" il répétera juste "Entrées Complètes" – Lost

+0

Ceci est proche de ce que j'essaye de faire, je pense que je peux travailler hors de ceci code. Je vous remercie! – MarkMyWords

+0

Je voudrais juste dire qu'après avoir réalisé ce que vous aviez fait, vous avez mis le doigt sur la tête. Je vous remercie! – MarkMyWords