2017-05-18 7 views
1

J'essaie de réaliser mon premier projet en Java après avoir appris les bases, alors je m'excuse pour ce qui est probablement une question débutant complète. J'ai cherché de l'aide toute l'après-midi, et mon code commence à avoir l'air désordonné et brisé. J'essaye de créer un rouleau de dés qui roule un certain nombre de d10, puis vérifie combien sont au nombre de 7 ou plus et les compte comme des succès. Si aucun des rouleaux n'est un succès, je veux qu'il affiche "Botch". Après quelques recherches, j'ai trouvé que créer une ArrayList et partir de là était (ce qui me semble être) la meilleure option. Mais je suis coincé depuis un certain temps, avec différentes erreurs et problèmes à venir, et chaque fois que j'en prends une, le code devient plus confus et mon objectif semble plus loin. Mon copain a dit "bienvenue à la programmation" et a suggéré que je demande à la communauté.Vérifier si les valeurs stockées dans une ArrayList sont supérieures à un nombre

Voici ce que je travaille avec:

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

public class RollDie { 
    public static void main(String[] args) { 
     Scanner userInput = new Scanner(System.in); 
     String numberOfDice; 

     // User input for number of dice to roll 
     System.out.print("How many dice? "); 
     numberOfDice = userInput.next(); 
     System.out.println("Rolling " + numberOfDice + " dice!"); 
     userInput.close(); 

     Integer roll = 0; 
     int dice = Integer.parseInt(numberOfDice); 
     int sides = 10; // # of die sides 
     ArrayList<Integer> sux = new ArrayList<Integer>(); // Store results of roll 


     // print result 
     for(int d=0; d < dice; d++) { 
      // roll should be 1 through sides 
      roll = (int) (Math.random() * sides) + 1; 
      sux.add(roll); 
     } 
     System.out.println(sux); 

     // Count successes and print or check for botch 
     for(int s = 0; s < sux.size(); s++){ 
      if(sux.get(roll) >= 7) { 
      s++; 
      System.out.println(s + " successes!"); 
     } else { 
      System.out.println("BOTCH!"); 
      break; 
     } 
    } 
    } 
} 

Tout imprime après la ArrayList sux est un gâchis. Je sais que la boucle for est mauvaise, je ne sais pas comment faire les choses correctement. La variable s ne semble pas à sa place ... Toute aide serait appréciée, et laissez-moi savoir si ce post est contre les normes pour la communauté de toute façon. Merci!

EDIT: Pour clarifier mes divagations, ma question est: comment vérifier si les nombres qui sont ajoutés à ArrayList après le roulement sont supérieurs ou égaux à 7 (ou n'importe quel nombre)?

+1

_Si aucun des rouleaux sont un succès, je le veux pour afficher « BOTCH » _, cela contredit votre code, vous devriez plutôt prendre la 'System.out.println (« bâcler! »);' Out de la boucle et utiliser une variable de drapeau pour aider à identifier quand il est approprié de l'afficher. Il me semble que vous posez ** plus d'une ** question, s'il vous plaît envisager de modifier votre poste limitant ainsi à ** un ** problème spécifique. –

+0

Merci pour la réponse et l'aide, je suppose que mon message est devenu un peu compliqué et gonflé au point d'être des questions multiples. – Zero

Répondre

1

Comme suggestion #Aomine plus tôt vous avez besoin d'un drapeau qui vous aide à trouver plutôt le cas échéant dés est> = 7 ou pas de dés atteindre cette condition.

// Count successes and print or check for botch 
     boolean isBotch=false; 
     for(int s = 0; s < sux.size(); s++){ 
      if(sux.get(s) >= 7) { 
      //s++; //no need to use this counter here again 
      System.out.println((s+1) + " successes!"); // s+1 gives you right location 
     } else { 
      isBotch = true; //flag variable 
     } 
     } 

     if(!isBotch){ 
      System.out.println("BOTCH!"); 
     } 
+0

Hmm, d'accord, je comprends et vois ce que vous avez fait ici, surtout avec le drapeau pour les botches. J'avais le sentiment que je faisais une erreur majeure en le mettant dans la boucle. Mais après ces changements, je reçois des sorties vraiment bizarres: ** Rouler 10 dés! [9, 9, 9, 3, 7, 7, 1, 1, 10, 5] 1 succès! 2 succès! 3 succès! 5 succès! 6 succès! 9 succès! ** Mais parfois ça marche? ** Combien de dés? 5 Rouler 5 dés! [7, 6, 1, 1, 2] 1 succès!** – Zero

+0

Voici un autre problème que vous souhaitez réussir à dupliquer des dés ou non, maintenant ici vous devez également faire une logique pour trouver les doublons dans la arrayList, une autre approche consiste à trouver l'occurrence en double afin de se débarrasser de cette sortie. – Omore

+0

Selon votre logique [7, 6, 1, 1, 2] 1 succès! -> Dans ce cas seulement 1 succès, ce que vous voulez demander "parfois ça marche"? – Omore

-1

mise à jour:

for(int s = 0; s < sux.size(); s++){ 
      if(sux.get(roll) >= 7) { //here value of sux.get(roll) will be regardless to s. should be typo. 
      s++;// no need to change value of s, as it will be changed during for clause. 
      System.out.println(s + " successes!"); 

      break; 
     } else { 
      System.out.println("BOTCH!"); 
     } 

devrait être

bool foundvalue = false; 
    for(int s = 0; s < sux.size(); s++){ 
      if(sux.get(s) >= 7) { 
      System.out.println((s+1) + " successes!"); 
      foundvalue = true; 
      break; 
     } 
    } 
    if (!foundvalue){ 
      System.out.println("BOTCH!"); 
     } 
0

Comment cela?

System.out.println(sux); 

    // Count successes and print or check for botch 
    int gtNumber = 0; 
    for(int s = 0; s < sux.size(); s++){ 
     if(sux.get(s) >= 7) { 
      gtNumber++; 
      System.out.println(s + " successes!"); 
     } 
    } 

    if(gtNumber == 0){ 
     System.out.println("BOTCH!"); 
    } 

}