2012-04-12 3 views
0

Java에서 배열을 사용하여 간단한 텍스트 파일에서 통계를 표시하려고합니다. 나는 내가해야 할 일을 알고 있지만, 어떻게 코딩해야 하는지를 정말로 모르겠습니다. 그래서 아무도 나에게 그것을 수행하는 방법에 대한 샘플 코드를 보여줄 수 있습니다.Java에서 배열로 통계 표시

Game Event, 1st place, second place, third place, fourth place 
World of Warcraft, John, Michael, Bill, Chris 
Call of Duty, Michael, Chris, John, Bill 
League of Legends, John, Chris, Bill, Michael. 

내 목표는 다음과 같은 통계를 표시하는 것입니다 : 다음과 같은 정보가 들어 있습니다 그래서

의 텍스트 파일이 gameranking.txt이라고 가정 해 봅시다은, (이 예제로 사용하는 간단한 txt 파일입니다) 많은 첫번째 장소, 두 번째 장소는 .. 각 개인이 다음

Placement  First place, second, third, fourth 
John   2   0  1  0 
Chris   0   2  0  1 
etc...  

같은 테이블에서 승리하는 방법 내 생각 :
첫째, 나는 gameranking.txt 저장이에 "입력"를 읽어 것입니다. 그런 다음 while 루프를 사용하여 각 행을 읽고 "line"이라는 문자열에 각 행을 저장 한 다음 나중에 배열 방법 "split"을 사용하여 각 문자열을 꺼내 개별 배열에 저장합니다. 그 후, 나는 각 개인이 차지한 배치를 계산하여 printf를 사용하여 깔끔한 테이블에 표시합니다.

첫 번째 문제는이 데이터의 배열을 만드는 방법을 모르겠다는 것입니다. 먼저 파일을 읽고 각 행과 열에 몇 개의 문자열이 있는지 확인한 다음 적절하게 배열 테이블을 만들어야합니까? 또는 각 문자열을 읽음으로써 배열에 저장할 수 있습니까?

지금 당장 가지고있는 의사 코드는 다음과 같습니다.

  • 카운트 많은 행이와
  • 다음 텍스트 파일을 읽어 배열
  • String [] [] gameranking = new String [row] [column] 만들기가 얼마나 많은 열 행에
  • 카운트를 저장하고 열에서
  • 를 보관하는 방법과 사용하여 배열

에 정보를 저장 :

을 어딘가에 코드, 내가 위치를 계산하기 위해 필요에
while (input.hasNextLine) { 
    String line = input.nextLine(); 
    while (line.hasNext()) { 
     Use line.split to pull out each string 
     first string = event and store it into the array 
     second string = first place 
     third string =...... 
  • .... 내가이 일에 대해 가지 방법

누군가가 나에게 보여 주시겠습니까?

+0

입력 파일의 형식에 대한 오류 검사를 수행해야합니까? 예를 들어, 다른 게임이 나열 될 수 있지만 그 다음에 3 개의 이름 만 있습니다 (4와 반대). –

+0

당분간은 오류 검사를 할 필요가 없습니다. 꽤 많은 텍스트 파일이 그 형식이 될 것입니다. – ScoutBlade

답변

2

내가 전체 프로그램을 작성하지 않을거야,하지만 각 질문을 해결하고 당신에게 간단한 제안을 제공하기 위해 노력할 것입니다 : 당신이 각 라인을 얻을 수

초기 파일 읽기 및 사용하여 문자열에 저장 당신이 문자열을 통해 갈 것 while 루프에서의 BufferedReader (만약 당신이 좋아하면, 또는, LineNumberReader를 사용) 그 시점에서

BufferedReader br = new BufferedReader(new FileReader(file)); 
String strLine; 
while ((strLine = br.readLine()) != null) { 
......Do stuff.... 
} 

, (이 쉼표로 구분하기 때문에, 각 부분을 분리해서 해당 사용할 수 있습니다). 각각의 하위 문자열에 대해 a) 첫 번째, 두 번째, 세 번째, 네 번째와 비교하여 게재 위치를 가져옵니다. b) 그 중 하나가 아닌 경우 게임 이름 또는 사용자 이름이 될 수 있습니다.

위치 또는 n 번째 하위 문자열로 알아낼 수 있습니다 (즉, 이것이 5 번째 하위 문자열 인 경우 첫 번째 게임 이름. 네 명이 있기 때문에 다음 게임 이름은 열 번째 하위 문자열이됩니다. 참고로, 나는 패턴의 일부가 아니기 때문에 "게임 이벤트"를 무시했습니다. split을 사용하면 내가 찾은 튜토리얼에 대한 링크를 제공 할 것이라고 설명하기보다는이 옵션 또는 여러 옵션을 사용하여 수행 할 수 있습니다. 결과를 도표화하는 데있어 기본적으로 int 배열을 얻을 수 있습니다. http://docs.oracle.com/javase/tutorial/uiswing/components/table.html

Alrighty : 테이블을 보여주는 등 자신의 1, 2, 3, 수상

int[] Bob = new int[4]; //where 0 denotes # of 1st awards, etc. 
int[] Jane = new int[4]; //where 0 denotes # of 1st awards, etc. 

를 추적 각 플레이어의 데이터를 구성하고, GUI에서의 JTable을 사용하는 문제이다. .. 여기 내가 쓴 것, 나는 깨끗하고 빠른 w가 있다고 확신한다. 당신은 참가자의 배열을 채우거나 게임을 추적해야하는 경우

String[] Contestants = {"Bob","Bill","Chris","John","Michael"}; 

int[][] contPlace=new int[Contestants.length][4]; 
String file = "test.txt"; 

public FileParsing() throws Exception { 
    Arrays.fill(contPlace[0], 0); 
    Arrays.fill(contPlace[1], 0); 
    Arrays.fill(contPlace[2], 0); 
    Arrays.fill(contPlace[3], 0); 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    String strLine; 
    while((strLine=br.readLine())!=null){ 
     String[] line = strLine.split(","); 
     System.out.println(line[0]+"/"+line[1]+"/"+line[2]+"/"+line[3]+"/"+line[4]); 
     if(line[0].equals("Game Event")){ 
      //line[1]==1st place; 
      //line[2]==2nd place; 
      //line[3]==3rd place; 
     }else{//we know we are on a game line, so we can just pick the names 
      for(int i=0;i<line.length;i++){ 
       for(int j=0;j<Contestants.length;j++){ 
        if(line[i].trim().equals(Contestants[j])){ 
         System.out.println("j="+j+"i="+i+Contestants[j]); 
         contPlace[j][i-1]++; //i-1 because 1st substring is the game name 
        } 

       } 
      } 
     } 
    } 
    //Now how to get contestants out of the 2d array 
    System.out.println("Placement First Second Third Fourth"); 
    System.out.println(Contestants[0]+" "+contPlace[0][0]+" "+contPlace[0][1]+" "+contPlace[0][2]+" "+contPlace[0][3]); 
    System.out.println(Contestants[1]+" "+contPlace[1][0]+" "+contPlace[1][1]+" "+contPlace[1][2]+" "+contPlace[1][3]); 
    System.out.println(Contestants[2]+" "+contPlace[2][0]+" "+contPlace[2][1]+" "+contPlace[2][2]+" "+contPlace[2][3]); 
    System.out.println(Contestants[3]+" "+contPlace[3][0]+" "+contPlace[3][1]+" "+contPlace[3][2]+" "+contPlace[3][3]); 
    System.out.println(Contestants[4]+" "+contPlace[4][0]+" "+contPlace[4][1]+" "+contPlace[4][2]+" "+contPlace[4][3]); 

} 

, 당신은 적절한 코드를 삽입해야합니다 : AY, 그러나 이것은 당신에게 아이디어를 줄 것이다. 또한이 2-d 배열 방법을 사용하는 것은 표시 이외의 다른 작업을 수행하려는 경우 가장 좋지 않을 수 있습니다. 내 코드를 가져 와서 메인 코드를 추가하고 코드를 실행할 수 있어야합니다.

1

텍스트 파일이므로 스캐너 클래스를 사용하십시오. 내용을 한 줄씩, 한 단어 씩 또는 사용자 지정 구분 기호로 읽을 수 있도록 사용자 지정할 수 있습니다.

readfromfile 메서드는 한 번에 한 줄씩 일반 텍스트 파일을 읽습니다.

이렇게하면 시작할 수 있습니다.

+0

이것은 질문에 대답하지 않습니다. 그는 입력 파일에서 생성 된 통계를 보유하는 배열을 만드는 방법을 묻습니다. 입력 구문 분석은 첫 번째 단계 일뿐입니다. –

+0

@LMV, 귀하의 의견에 감사드립니다. 내가 당장 문제가되는 것은 배열 테이블을 만들고 각 문자열을 배열 테이블에 저장하는 방법입니다. 먼저 배열의 차원을 먼저 결정합니까 (예 : 5 x 4? 그런 다음 배열 테이블을 만듭니다. 하지만 각 문자열을 배열에 저장하려면 어떻게해야합니까? for 루프 나 다른 방법을 사용합니까? 감사. – ScoutBlade

관련 문제