2017-03-06 6 views
2

Ich habe ein String-Array namens teams und ein int-Array namens nums erstellt. Jede Ganzzahl im Array num entspricht einem Team im Array string.Java While Loop & 1D Array

Ex:

Montreal Canadiens = 1, = Chicagao Blackhawks 2 usw.

Ich brauche zufällig Nummern zur Auswahl 1-10 ([] num int entspricht), und dies Die Schleife muss fortgesetzt werden, bis jedes Element im Integer-Array einmal aufgerufen wird. Am Ende der Schleife bedeutet dies, dass jedes Team im String-Array einmal aufgerufen wird. Dies muss durch eine while-Schleife erfolgen. Ich kann nicht herausfinden, wie man genau eine Schleife erstellt, die das tun würde.

import java.util.Scanner; 

public class Question1 { 

    public static void main(String[] args) { 

//declare scanner 
     Scanner keyboard= new Scanner (System.in); 


//display opening message 
     System.out.println("= 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 ="); 
     System.out.println("= 0              0 ="); 
     System.out.println("= 0  NHL Miniature Hockey Puck Vending Machine  0 ="); 
     System.out.println("= 0              0 ="); 
     System.out.println("= 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 ="); 
     System.out.println(""); 
     System.out.println(""); 
     System.out.println("Hello, what is your first name? "); 

//read user input 
     String name = keyboard.nextLine(); 

//Welcome message 
     System.out.println("Welcome " + name + "! Let's see how much money you will need to spend to get all of the pucks."); 

//declaring 10 teams in a 1D array 
    String[] teams = {"Montreal Canadiens","Chicago Blackhawks","Boston Bruins","Toronto Maple Leafs","Vancouver Canucks","Ottawa Senators","Pittsburgh Penguins","Calgary Flames","New York Rangers","Edmonton Oilers"}; 

int[] nums = {1,2,3,4,5,6,7,8,9,10}; 

//random number from 1-10 
while (
     int RandomNum = (int)(Math.random()*10)+1; 
+0

Vergiss nicht, 'keyboard.close();' zu nennen :-) – mcuenez

Antwort

1

Verwenden Sie eine Liste/Vektor statt ...

dann mehr nur Sie keine Zufallszahl benötigen, ist dies die Liste

List<String> teams = new Vector<>(Arrays.asList("Montreal Canadiens", "Chicago Blackhawks", "Boston Bruins", 
    "Toronto Maple Leafs", "Vancouver Canucks", "Ottawa Senators", "Pittsburgh Penguins", "Calgary Flames", 
    "New York Rangers", "Edmonton Oilers")); 
int ts = teams.size(); 
for (int i = 0; i < ts; i++) { 
    System.out.println(teams.remove(0)); 
    Collections.shuffle(teams); 
} 
+0

Gibt es nicht die Chance, dass das gleiche Team mehr als einmal gedruckt wird und damit andere überhaupt nicht? – mcuenez

+1

ja ... Sie müssen das Element entfernen .... –

1

schlurfenden:

List<String> teamsList = new ArrayList<String>(Arrays.asList(teams)); 
while(!teamsList.isEmpty()){ 
    int randomNum = (int)(Math.random()*teamsList.size()); 
    String team = teamsList.remove(randomNum); 
} 

Oder:

List<String> teamsList = new ArrayList<String>(Arrays.asList(teams)); 
Collections.shuffle(teamsList); 
while(!teamsList.isEmpty()){ 
    String team = teamsList.remove(0); 
} 

Edit1: Wenn Sie nicht den Teamnamen, sondern die Teamnummer wollen, ersetzen Sie einfach die Teams -> nums.

Edit2:

Import diese Klassen:

import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 
+0

Vielen Dank für Ihre Zeit. Wenn ich versuche zu verwenden, was Sie vorgeschlagen haben, bekomme ich mehrere Fehler in der ersten Zeile (Liste ....) "ArrayList kann nicht in eine Variable aufgelöst werden", "Liste kann nicht in eine Variable aufgelöst werden", "Arrays können nicht sein behoben " – peanut

+0

Sie begrüßen =) Importe müssen für diese Klassen hinzugefügt werden (siehe meinen aktualisierten Beitrag) – Screwb

0

Zunächst einmal, wenn Sie die Werte in nums wollen in teams den Werten zu entsprechen, Sie gehen die Werte beginnen soll bei 0 und endet bei 9, so dass die Zahlen den Indizes der Teams entsprechen.

Wenn Sie dies manuell tun wollen, würde ich eine Schleife vorschlagen, wo Sie den zufällig ausgewählten Wert bewegen sich nach vorn, etwa so:

int i = 0; 
while(i<nums.length){ 
    int randomIndex = i + (int)Math.random*(nums.length-i); 
    int temp = nums[i]; 
    nums[i] = nums[randomIndex]; 
    nums[randomIndex] = temp; 
    i++ 
} 

Dann können Sie Schleife durch die Liste wieder, und Die Werte, die Sie durchlaufen, sind (pseudo) zufällig von 1-10. Sie können die Liste dann sortieren, wenn Sie sie sortiert haben.

0

Sie können Ihr Array mischen und dann eins nach dem anderen mit While-Schleife gehen.

Werfen Sie einen Blick auf diese Lösung https://stackoverflow.com/a/1520212/814304 (verwenden Sie nur While-Schleife anstelle von For-Schleife);

0

Wenn die Zahlen in Ihrem nums Array Indizes sein sollen, würde ich annehmen, dass jede andere Antwort gut funktionieren würde. Ich habe deine Frage so interpretiert, dass deine Zahlen so sein sollten und auch andere Zahlen sein könnten.

In diesem Fall würde ich eine Team Klasse erstellen, wie unten zu sehen ist.

Mannschaft

public class Team { 
    private static final String DELIMITER = "/"; 

    private String name; 
    private int number; 

    public Team(String name, int number) { 
     this.name = name; 
     this.number = number; 
    } 

    public String getName(){ 
     return this.name; 
    } 

    public int getNumber(){ 
     return this.number; 
    } 

    @Override 
    public String toString(){ 
     return this.getName() + DELIMITER + this.getNumber(); 
    } 
} 

Haupt

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

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

     // declare scanner 
     Scanner keyboard = new Scanner(System.in); 

     // display opening message 
     System.out.println("= 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 ="); 
     System.out.println("= 0              0 ="); 
     System.out.println("= 0  NHL Miniature Hockey Puck Vending Machine  0 ="); 
     System.out.println("= 0              0 ="); 
     System.out.println("= 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 ="); 
     System.out.println(""); 
     System.out.println(""); 
     System.out.println("Hello, what is your first name? "); 

     // read user input 
     String name = keyboard.nextLine(); 

     // Welcome message 
     System.out.println("Welcome " + name + "! Let's see how much money you will need to spend to get all of the pucks."); 

     List<Team> teams = new ArrayList<>(); 
     teams.add(new Team("Montreal Canadiens", 1)); 
     teams.add(new Team("Chicago Blackhawks", 2)); 
     teams.add(new Team("Boston Bruins", 3)); 
     teams.add(new Team("Toronto Maple Leafs", 4)); 
     teams.add(new Team("Vancouver Canucks", 5)); 
     teams.add(new Team("Ottawa Senators", 6)); 
     teams.add(new Team("Pittsburgh Penguins", 7)); 
     teams.add(new Team("Calgary Flames", 8)); 
     teams.add(new Team("New York Rangers", 9)); 
     teams.add(new Team("Edmonton Oilers", 10)); 

     List<Team> visitedTeams = new ArrayList<>(); 

     while (teams.size() > visitedTeams .size()) { 
      int randomNum = (int) (Math.random() * teams.size()); 
      Team team = teams.get(randomNum); 

      if (!visitedTeams.contains(team)) { 
       visitedTeams.add(team); 
      } 
     } 

     // Close your scanner 
     keyboard.close(); 

     System.out.println("Teams called: "); 
     visitedTeams.forEach(System.out::println); 
    } 
} 

Hinweis, die ich die Tastatur geschlossen, mit dem Sie auch nach dem Lesen des Namens des Benutzers tun könnte. Außerdem entferne ich die Teams nicht von der Liste, da ich mir vorstellen kann, dass Sie sie für die weitere Verarbeitung behalten möchten.

Ausgabe

= 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 
= 0              0 = 
= 0  NHL Miniature Hockey Puck Vending Machine  0 = 
= 0              0 = 
= 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 0 = 


Hello, what is your first name? 
MyName 
Welcome MyName! Let's see how much money you will need to spend to get all of the pucks. 
Teams called: 
Chicago Blackhawks/2 
Toronto Maple Leafs/4 
Edmonton Oilers/10 
Boston Bruins/3 
Ottawa Senators/6 
Calgary Flames/8 
Vancouver Canucks/5 
Pittsburgh Penguins/7 
Montreal Canadiens/1 
New York Rangers/9 
0

hier sind 30 Eishockey-Teams in der NHL (National Hockey League). Einige Geschäfte haben Automaten, die Miniatur-Team-Hockey-Pucks für eine Toonie ($ 2) jeweils ausgeben. Wenn Sie eine Toonie einsetzen, wissen Sie nie, welchen Puck Sie bekommen werden. Jeder der 30 Team-Pucks ist so wahrscheinlich wie jeder andere, der von der Maschine ausgegeben wird. Sie werden zufällig verteilt. Für diese Übung werden wir die Teams auf 10 begrenzen. Ihre Aufgabe ist es, ein Programm zu schreiben, um die Ausgabe von NHL-Miniatur-Pucks zu simulieren, bis einer von jeweils 10 Miniatur-Team-Hockeypucks ausgegeben wird. Ihr Programm sollte folgendermaßen vorgehen: 1. Zeigen Sie eine Willkommensnachricht an und bitten Sie den Benutzer, ihren Namen einzugeben. 2. Speichern Sie den Namen Ihrer 10 Lieblingshockeymannschaften in einem String-Array. Ordnen Sie die Teamnamen in die Deklarationsanweisung direkt zu. 3. Ihr Programm sollte eine Schleife durchlaufen (verwenden Sie eine While-Schleife), bis mindestens ein Miniatur-Puck jedes Teams ausgegeben wurde. Erstellen Sie ein Integer-Array der Größe 10, das als Zähler-Array dient, um die Anzahl der vom Automaten ausgegebenen Team-Pucks zu verfolgen. Sie müssen die Funktion Math.random() verwenden, um einen Miniatur-Puck zufällig zu verteilen. Die Math.random() -Methode gibt einen doppelten Wert mit einem positiven Vorzeichen, größer als oder gleich 0.0 und kleiner als 1.0 zurück. 4. Wenn Sie mindestens eine von jeder Puck angesammelt haben, zeigen, wie viele der einzelnen Teams Puck Sie, die Gesamtzahl der Pucks gekauft kaufen musste und die Gesamtkosten in einer persönlichen Nachricht

1 - Eindimensionale Array & while loops