2017-03-06 19 views
2

チームとnumsというint配列という文字列配列を作成しました。 num配列の各整数は文字列配列内のチームに対応します。Java Whileループ&1D配列

例:

モントリオールカナディアン= 1、Chicagaoブラックホークス= 2、等

Iがランダム1-10([] NUMをintに相当)と、このから番号を選択する必要があります整数配列内の各要素が1回呼び出されるまでループを続行する必要があります。意味はループの終わりで、文字列配列の各チームは一度呼び出されます。これは、whileループを介して行う必要があります。私はこれを行うループを正確に作成する方法を理解できないようです。

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

'keyboard.close();' :-)を忘れずに – mcuenez

答えて

1

代わりに、リスト/ベクトルを使用して...

、あなたはもう乱数を必要としない、唯一のリストをシャッフル

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

同じチームが複数回印刷される可能性はありませんか? – mcuenez

+1

はい...要素を削除する必要があります.... –

1

この:

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

または

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

Edit1: チーム名は必要ありませんが、チーム番号を指定する場合は、チーム - > numを置き換えてください。

EDIT2:

インポートこれらのクラス:あなたはnumsの値がteamsの値に対応するようにしたい場合は、すべての

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

ありがとうございました。あなたが提案したものを使用しようとすると、最初の行に複数のエラーが表示されます(リスト ....) "ArrayListを変数に解決できません"、 "リストを変数に解決できません"、 "配列はできません解決済み " – peanut

+0

あなたは=) これらのクラスのインポートを追加する必要があります(私の更新された記事を参照) – Screwb

0

まず、あなたが値を開始したいとしています0で9で終わるので、数字はチームの指数に対応します。

手動でこれを実行したい場合は、私はそうのように、あなたは、フロントまでランダムに選択された値を移動するループを示唆している:

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++ 
} 

を次に、あなたは再びリストをループすることができ、かつあなたがループした値は1から10までランダム(擬似)になります。並べ替えが必要な場合は、リストを並べ替えることができます。

0

nums配列の数字がインデックスであると仮定すると、他の答えはうまくいくと思います。私は、あなたの質問を解釈して、あなたの数字はそのようになっているはずであり、他の数字である可能性もあります。

この場合、下記のようにTeamクラスを作成します。私は、あなたが同様にユーザーの名前を読んだ後行うことができますキーボードを閉じ

チーム

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(); 
    } 
} 

メイン

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); 
    } 
} 

注意。また、リストからチームを削除することはありません。さらなる処理のためにチームを維持したいと考えています。

出力

= 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

ここNHL(ナショナルホッケーリーグ)で30のホッケーチームがあります。いくつかの店舗には、トーナメント($ 2)ごとにミニ・チームのホッケー・パックを分け与える自動販売機があります。あなたはtoonieを入れるとき、あなたはあなたが得るパックを決して知りません。 30チームのパックのいずれか1つは、マシンによって調剤される他のものと同様です。彼らはランダムに与えられる。 あなたの仕事は、10個のミニチュアチームホッケーパックの1つが投薬されるまで、NHL小型パックの投薬をシミュレートするプログラムを書くことです。 プログラムは次のように処理する必要があります。 1.ウェルカムメッセージを表示し、ユーザーに名前を入力するように依頼します。 2.お気に入りのホッケーチーム10名をStringの配列に格納します。 のチーム名を直接宣言文に割り当てます。 3.各チームの少なくとも1つの小型パック が処分されるまで、プログラムはループする(whileループを使用する)必要があります。自動販売機によって調剤された各チームパックの数を記録するカウンターアレイとして機能する、サイズ10の整数配列を作成します。ミニパックをランダムに分配するには、Math.random()関数を使用する必要があります。 Math.random()メソッドは、0.0以上1.0未満の正の符号を持つdouble値を返します。 4.各パックの少なくとも一方、あなたは、購入したパックの合計数を購入しなければならなかった各チームパックとパーソナライズされたメッセージ

1における総費用の何が表示され蓄積してきたら - 1次元配列&をwhileループ