2016-12-18 7 views
0

私は比較的新しいJavaです。変数を1行のユーザー入力とは別に保存する方法を知りたいと思います。配列を使用してユーザー入力から複数の変数を格納する

分で、ユーザは次の形式

home_name : away_name : home_score : away_score 

でサッカーの結果を入力するよう求めていると私は、彼らが

(while (input != "stop)) 
を「停止」入力するまで、ユーザーに入力を求めるために継続して、whileループを使用しています

ループが壊れてしまった場合、私のプログラムは、ゲームの合計などのさまざまなデータを出力したいと思いますが、私はhome_nameaway_nameなどを保存するのに苦労しています。特に、複数の結果行を入力したい場合。 "記録" を保存する

+0

(ユーザーと仮定すると試合結果の100行を入力したい) – gv555

+0

は、あなたが持っている特定の問題にあなたが持っているものは何でもコード投稿し、ポイントしてください。うーん、助けてくれるでしょう。 – 2ps

+0

はJavaでタグ付けされています。質問はJavaについてです....... – Tim

答えて

0

二つの主流の方法があります。

  • 地図
  • データは

マップがより一般的であるオブジェクト:

Map<String,String> match = new HashMap<>(); 
match.put("home_name", "Alvechurch Villa"); 
match.put("away_name", "Leamington"); 
match.put("home_score", "0"); 
match.put("away_score", "6"); 

あなたが追加することができますがリストにマップ:

List<Map<String,String>> matches = new ArrayList<>(); 
matches.add(list); 

...そしてそれらを取得:

Map<String,String> match = matches.get(0); 
System.out.println(match.get("away_score")); 

データオブジェクトは、より多くのあなたのデータ形式にチューニングされていますが、クラスを自分で記述する必要があります。

public class Match { 
    public String homeName; 
    public String awayName; 
    public int homeScore; 
    public int awayScore; 
} 

今、あなたは、このクラスを使用することができます。

Match match = new Match(); 
match.homeName = "Studley"; 
// etc. 

あなたはあまりにもリストからこれらを追加して検索することができます。

List<Match> matches = new ArrayList<>(); 
matches.add(match); 
Match aMatch = matches.get(0); 

これは簡単ですが、公共の持っている悪い習慣と考えられていますこのようなフィールドは、メソッドを介して取得する方がよいでしょう。簡潔にするため、ここでは1つのフィールドだけを持つデータのクラスがあります:

public class Player { 
    private String name; 
    public Player(String name) { 
     this.name = name; 
    } 

    public String name() { 
     return name; 
    } 
} 

Player neilStacey = new Player("Neil Stacey"); 

はあなたがMatch内のすべてのフィールドと同じ技術を使用することができます。

(共通スタイルは、このgetName()のようなメソッドに名前を付けるために、また、setName()を持つことです。私は別のスタイルを使用して良い例を設定するための努力で、オブジェクト不変をした!)


データオブジェクトの利点の1つは、異なるフィールドに異なるタイプがあることです。homeNameは文字列、homeScoreは整数です。マップ内のすべてのフィールドは文字列です。あなたはMap<String,Object>を使用してこれを回避することができますが、消費者として読むときに正しいタイプにキャストする必要があります。

String homeName = (String) match.get("home_name"); 

データオブジェクトを使用すると、コードが正しいことを知るのに役立つコンパイル時のチェックを多く行うことができます。マップを使用すると、実行時まで見つけることができません。

+0

を保存するために、別の部分に入力のそれぞれの行を分割する方法を知っていただきたいと思いますが、私はまだ私を得るのに苦労しています次の形式が入力されたときに各変数をどのように受け取ってユーザー入力から保存するかについて頭を浮かべてください。= home_name:away_name:home_score:away_score私は、入力ごとにユーザに別々にプロンプ​​トを出したくない。 – gv555

+0

例えば、私の現在の基本構造は次のようになります... boolean stop = true; \t \t \t \tながら(停止) \t \t { \t \tのSystem.out.println( \t \t \t \t + "以下の形式で結果を入力してください" "HOME_TEAM_NAME:AWAY_TEAM_NAME:HOME_TEAM_SCORE:AWAY_TEAM_SCORE(ホーム)" \t \t \t \t + "、または終了するには「stop to quit」と入力してください)。 \t \t \t \t文字列レスポンス= scan.nextLine(); \t \t IF(response.equalsは( "停止")) \t \t { \t \t \tストップ= FALSE; \t \t \t } – gv555

+0

実際に文字列を分割する方法を知りたい場合は、変数の格納について質問したようです。 Googleの "Java split string"。 – slim

0

入力ごとにユーザーに個別にプロンプ​​トを出します。

System.out.println("home_name: "); 
String hN = scan.next(); 
System.out.println("away_name: "); 
String aN = scan.next(); 
System.out.println("home_score: "); 
String hS = scan.next(); 
System.out.println("away_score: "); 
String aS = scan.next(); 
+0

私は、ユーザが次の形式で入力することを望みます:home_name:away_name:home_score:away_score、各変数には別々のものではありません。 – gv555

関連する問題