2016-12-11 8 views
1

タスク:プログラムのユーザーがフィールド内の8レーンのランニングトラックのそれぞれにランナーを割り当てることを許可するJavaプログラムを作成します。重複入力なしのarraylist javaへのコンソール入力

入力プロセス、配列リスト、セッター、ゲッタが正しく動作するようになりましたが、私の問題は8レーンの入力数を制限して1ランナーあたり1レーンしか割り当てることができないという問題です。ここに私の入力コードは、現在、次のとおりです。

public List<Item> createListOfCompetitors(){ 

    List<Item> newListOfCompetitors = new ArrayList<>(); 

    try (Scanner sc = new Scanner(System.in)) { 
     do { 
      System.out.println("Enter Competing Runner Name"); 
      String name = sc.nextLine(); 

      System.out.println("Assign a lane to the runner! "); 
      while (!sc.hasNextDouble()) { 
       System.out.println("Use a valid number"); 
       sc.next(); 
      } 
      double lane = sc.nextDouble(); 
      Item item = new Item(name, lane); 
      newListOfCompetitors.add(item); 
      System.out.println("Enter Y to continue or N to quit"); 
      sc.nextLine(); 
     } while (sc.nextLine().equalsIgnoreCase("y")); 
    } 
    return newListOfCompetitors; 
} 

Dependencies in my program

+0

アレイ(インデックス=レーン番号)またはマップ(キー=レーン番号)はどうですか? –

+0

レーン番号とキーのキーをランナー名として使用したマップを使用しますか? –

+0

私はそれがうまくいくことは知っていますが、コンソール入力の限界を実装して、トラックレーンにランナー名を割り当てて、2番目、3番目、既に割り当てられているレーンへの第4のランナー名。それは理にかなっていますか?私がしなければならないことは、入力中に未使用のトラックレーン番号の使用を許可するしか方法を見つけ出すことではありません。 – Javacodeman113

答えて

0

私が占有されているレーンを表すための項目にレーンのマップを使用するために行くかもしれません。このようにして、コンソールから入力した車線が既に占有されているかどうかを確認する条件を追加できます。

public Map<Double, Item> createListOfCompetitors() { 
    Map<Double, Item> lanes = new HashMap<>(); 

    try (Scanner sc = new Scanner(System.in)) { 
     do { 
      System.out.println("Enter Competing Runner Name"); 
      String name = sc.nextLine(); 

      System.out.println("Assign a lane to the runner! "); 
      double lane; 
      do { 
       String lane = sc.nextLine(); 
       try { 
        lane = Double.parseDouble(lane); 
        if (lanes.get(lane) == null) { 
         lanes.put(lane, new Item(name, lane)); 
         break; 
        } else { 
         System.out.println("Lane number already chosen."); 
        } 
       } catch (NumberFormatException e) { 
        System.out.println("Please enter a valid lane number."); 
       } 
      } while (true); 
     } while (sc.nextLine().equalsIgnoreCase("y")); 
    } 

    return lanes; 
} 
+0

ありがとうございます私の問題に答えるでしょう。今すぐ地図についてもっと学びましょう!再度、感謝します! – Javacodeman113

関連する問題