2016-05-05 16 views
-1
  1. この形式で自分のゲームを入力:ArrayListの印刷値がありませんか?

    テスト:120:120
    ゲーム:120:120
    は私のtxtファイルは私の第二の私の最初のエントリを示すとされていない

  2. を終了しましたエントリ、私のテキストファイルには、この下に表示されます。

    プレーヤー:アダム


    ゲーム:テスト、スコア= 120、分= 120

  3. を果たした。しかし、私はそれを表示する:

    ゲーム:テスト、スコア= 120、分演奏= 120
    ゲーム:FEFF、スコア= 3412、分演奏= 434

これまでのところ、私のコードは次のとおりです。

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.util.ArrayList; 
import java.util.List; 
import java.util.Scanner; 

public class Generator { 
    private static char[] input; 

    public static void main(String[] args) { 
     int[] minutesPlayed = new int [100]; 
     String gamerName, gamerReport; 
     String[] gameNames = new String[100]; 
     int[] highScores = new int[100]; 
     @SuppressWarnings("resource") 
     Scanner Scan = new Scanner(System.in); 

     System.out.println("-------------- Game Score Report Generator --------------"); 
     System.out.println("  "); 
     System.out.print("Enter your Name."); 
     System.out.println(" "); 
     gamerName = Scan.nextLine(); 

     boolean isEmpty = gamerName == null || gamerName.trim().length() == 0; 
     if (isEmpty) { 
      System.out.print("Enter your Name."); 
      gamerName = Scan.nextLine(); 
     } 

     System.out.println("Enter details in this format - " + " --> Game : Achievement Score : Minutes Played"); 
     System.out.println(" "); 
     System.out.println("Game : Achievement Score : Minutes Played"); 

     gamerReport = Scan.nextLine(); 
     Scanner scanner = new Scanner(System.in);  
     List<String> al = new ArrayList<String>();  
     String word;         
     while (scanner.hasNextLine()) {    
     word = scanner.nextLine();     
     if (word != null) {       
      word = word.trim();      
      if (word.equalsIgnoreCase("quit")) {  
      break;         
      } 
      al.add(word);        

     } else { 
      break;         
     } 
     } 

     String[] splitUpReport; 
     splitUpReport = gamerReport.split(":"); 
     int i = 0; 

     gameNames[i] = splitUpReport[0]; 
     highScores[i] = Integer.parseInt(splitUpReport[1].trim()); 
     minutesPlayed[i] = Integer.parseInt(splitUpReport[2].trim()); 

     try 
     { 
     PrintWriter writer = new PrintWriter(new FileOutputStream("Gaming Report Data.txt", true)); 
     writer.println("Player : " + gamerName); 
     writer.println(); 
     writer.println("--------------------------------"); 
     writer.println(); 
     String[] report = gamerReport.split(":"); 
     writer.println("Game: " + report[0] + ", score= " +report[1] + ", minutes played= " +report[2]); 
     writer.close(); 

    } catch (IOException e) 
    { 
     System.err.println("File does not exist!"); 
    }  
    }     
public static char[] getInput() { 
    return input; 
} 
} 

答えて

0

あなたの最初のスコア入力はgamerReportという変数に格納されていますが、それ以降のすべてのスコア入力はalというArrayListに追加されます。コードの最後に、gamerReport変数(最初のスコアのみを含む)からデータを取得しています。

ループ中にal ArrayListにすべてのコードを追加し、その後にテキスト出力セクションをalまで繰り返すことができます。

例のコードが入力

Scanner scanner = new Scanner(System.in); 
ArrayList<String> al = new ArrayList<>(); 
String word = ""; 

while (true) { 
    word = scanner.nextLine(); 
    if (word != null) word = word.trim(); 
    if (word.equalsIgnoreCase("quit")) break; 
    al.add(word); 
} 

System.out.println(al); 

をキャプチャして保存するため、このコードは、2つの異なる変数に保存されたデータを持っていることの問題を回避して、それがないと(それが今、すべてalに保存されている、とgamerReportは削除されました必要)。これを後でファイルに出力するには、それを反復処理する必要があります(for (String str : al) { ... }など)。

このコードはユーザーの立場ではありません。正規表現を調べて、ユーザーが無効なデータを入力しないようにするのが賢明かもしれません。

+0

これを行う方法についてのご意見は、正しい方向に私を指摘する可能性があります。 –

+0

入力を収集するために、ユーザーが 'quit'を入力すると終了するwhileループを使用できます。 – Surreily

+0

あなたにはコードスニペットが表示されますか? –