2011-12-14 2 views
0

다른 배열의 동일한 인덱스를 사용하여 몇 가지 기본 연산을 수행하기 위해 두 배열을 비교하려고합니다. 나는 정확한 답을 얻지 못하고 있는데 배열이 정확하게 비교되지 않기 때문이라고 생각한다. 어레이 STD2 STD1이 동일한 레코드의 배수로 (중복) 9 개 숫자 레코드를 포함하면서특정 인덱스를 비교할 때 배열 루프가 작동하지 않습니다.

y = 0; 
    for (x=0; x<std1.length; x++){ 
     if (std1[x]==std2[y]){ 
      sumhrs[x] += hrs[y]; 
      mult[x] = hrs[y] * ngrd[y]; 
      hold[x] = hold[x] + mult[x]; 
      gpa[x] = hold[x]/sumhrs[x]; 
      y++; 
     } 
    } 

배열 STD1 4 개 숫자 레코드를 포함 여기 내 코드이다. 다른 배열 (hrs, ngrd 등)은 배열에 std2 배열의 레코드가 포함되어 있으므로 동일한 변수 [y]에 연결됩니다.

 
    Here is the current output: 
    205 Smart 4.0 A 
    400 Brent 0.0 NONE 
    155 Brown 0.0 NONE 
    150 Canon 0.0 NONE 
이것은 숙제이며이 문제를 파악하는 데 많은 시간을 할애 할 수 없었습니다. 이 숙제의 최종 결과는 이름과 학년 정보가있는 두 개의 학생 파일에서 평점을 계산하는 것입니다. 배열에 파일을 추가 한 다음 배열을 특정 형식 (int, double, string)의 고유 한 배열로 분할했지만 GPA를 계산하는 동안 인덱스 정확성을 유지하기 위해 모든 중복을 유지했습니다. 즉, 배열 std2 [5]와 hrs [5]는 인덱스 [5]에서 하나의 결합 된 배열이었을 때와 동일한 데이터를 유지했습니다.

도움을 주시면 감사하겠습니다.

감사

*** 편집 :

내 전체 코드를 추가하는거야 내가 여기에서 당겨있어 두 파일 :

 
    File 1tab delimited 
    205 Smart 
    400 Brent 
    155 Brown 
    150 Canon 
 
    File 2tab delimited 
    205 1 4.0 
    205 3 2.8 
    205 4 4.0 
    205 3 2.3 
    400 3 3.5 
    155 2 2.7 
    150 3 3.0 
    150 3 4.0 
    150 3 2.7 

public static void main(String[] args) throws IOException { 
    FileInputStream in1 = new FileInputStream("c:/users/da/desktop/" 
      + "file1.txt"); 
    BufferedReader br1 = new BufferedReader(new InputStreamReader(in1)); 
    FileInputStream in2 = new FileInputStream("c:/users/da/desktop/file2.txt"); 
    BufferedReader br2 = new BufferedReader(new InputStreamReader(in2)); 

    String[] file1array = new String[4]; 
    String[] file2array = new String[9]; 

    for (int j = 0; j < file1array.length; j++){ 
     file1array[j] = br1.readLine();} 
    for (int j = 0; j < file2array.length; j++){ 
     file2array[j] = br2.readLine();} 

    int i = 0; 
    int j = 0; 
    int x = 0; 
    int y = 0; 
    int index = 00; 

    int[] std1 = new int [file1array.length]; 
    String[] name = new String [file1array.length]; 

    int[] std2 = new int [file2array.length]; 
    int[] hrs = new int [file2array.length]; 
    double[] ngrd = new double [file2array.length]; 
    double[] mult = new double [file2array.length]; 
    double[] sumhrs = new double [file1array.length]; 
    double[] hold = new double [file2array.length]; 

    double[] gpa = new double [file1array.length]; 
    String[] lgrd = new String [file1array.length]; 

    String line1 = ""; 
    String[] data1; 
    String line2 = ""; 
    String[] data2; 

    for (x=0; x<file1array.length; x++){ 
      line1 = file1array[x]; 
      data1 = line1.split("\t"); 
      std1[x] = Integer.parseInt(data1[0]); 
      name[x] = data1[1];} 

    for (x=0; x<file2array.length; x++){ 
      line2 = file2array[x]; 
      data2 = line2.split("\t"); 
      std2[x] = Integer.parseInt(data2[0]); 
      hrs[x] = Integer.parseInt(data2[1]); 
      ngrd[x] = Double.parseDouble(data2[2]);} 

    y = 0; 
    for (x=0; x<std1.length; x++){ 
     if (std1[x]==std2[y]){ 
      sumhrs[x] += hrs[y]; 
      mult[x] = hrs[y] * ngrd[y]; 
      hold[x] = hold[x] + mult[x]; 
      gpa[x] = hold[x]/sumhrs[x]; 
      y++; 
     } 
    } 

    for (x=0; x<gpa.length; x++){ 
     if (gpa[x] <= 4.0){ 
      lgrd[x] = "A";} 
     if (gpa[x] < 3.4){ 
      lgrd[x] = "B";} 
     if (gpa[x] < 3.7){ 
      lgrd[x] = "C";} 
     if (gpa[x] < 2.0){ 
      lgrd[x] = "D";} 
     if (gpa[x] < 1.3){ 
      lgrd[x] = "F";} 
     if (gpa[x] < 0.1){ 
      lgrd[x] = "NONE";} 
    } 

    System.out.println ("   STUDENT REPORT"); 
    System.out.println (""); 
    System.out.println ("STUDENT STUDENT GPA GRADE"); 
    System.out.println (" NUMBER NAME"); 
    for (x=0; x<gpa.length; x++) 
     System.out.println (" " + std1[x] + " " + name[x] + "  " + gpa[x] + 
       " " +lgrd[x]); 
} 

}

답변

1

나는 y++이외부에 있어야한다고 생각합니다.성명, 그 안에 없습니다.

가 현재이므로, x는 for 루프를 통해마다 증가됩니다,하지만 무엇 각 열을 쉽게 알 수 있도록 std1[x] == std2[y]

+1

왜 .... 당신은 당신을 의미하지 않습니다! –

+0

나는 당신이 말하는 것을 의미한다고 생각한다. 그러나 "y는 단지 증가한다. .."잘 붙잡는다. +1 –

+0

아아 - 예 - 감사합니다! :-) – Shaun

0

당신이 출력을 위해 사용하고있는 코드를 추가 할 경우 Y는 증가됩니다 ?

그건 그렇고, 당신의 문제는 당신이 배열 y 모두를 다루고 있지 않다는 것입니다. 너는 x의 길이까지 반복하고있어, 만약 네가 좋아한다면, y는 중복이된다. 결코 계산할 수없는 레코드가있을 수있다. 이러한 배열을 가지고 있다면 : 루프를 포함하지 않을 것 같은

x = 1, 2, 3, 4, 5 
y = 1, 2, 1, 2, 3, 3, 4, 5 

그런 다음 번호 45에 대해 계산 된 값은 0이 될 것입니다.

y의 중복을 시도하고 코드를 처리 할 수 ​​있지만 예상대로 작동하지 않습니다. std2std1[x]을 검색하는 내부 루프가 진행 중에 도움이 될 것입니다.

+0

응답 해 주셔서 감사합니다. 사용하고있는 전체 코드와 예제 파일을 추가했습니다. 나는 그것이 많다는 것을 알고있다. 그러나 당신이 나에게 줄 수있는 어떤 의견이라도 고맙게 생각할 것이다. 나는 앞으로 2 ~ 3 시간 동안이 일을 할 것이고, 나는 내가 가진 것을 되돌려 야 할 것이다. – INGUES

관련 문제