比较特定索引时,数组循环不起作用

时间:2011-12-14 04:13:00

标签: java arrays

我试图将两个数组进行比较,以便在其他数组中使用相同的索引进行一些基本的数学运算。我没有收到正确答案,我认为这是因为数组没有正确比较。这是我的代码:

    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个数字记录,而数组std2包含9个数字记录,其中多个(重复)与std1具有相同的记录。其他数组(hrs,ngrd等)链接到同一个变量[y],因为它们包含序列到数组std2的记录。     

    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
    
这是家庭作业,我花了很多时间试图解决这个问题,但事实并非如此。这项功课的最终结果是从两个学生档案中计算出具有姓名和成绩信息的GPA。我将文件添加到数组中,然后将数组拆分为具有特定格式(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]);
}

}

2 个答案:

答案 0 :(得分:1)

我猜测y++应该在if语句之外,而不在其中。

目前,x每次通过for循环都会递增,但是只有std1[x] == std2[y]

才会递增y

答案 1 :(得分:0)

您可以添加用于输出的代码,以便轻松查看每列代表的内容吗?

除此之外,我认为您的问题是您没有覆盖所有数组y。你循环到x的长度,如果你想说,y有重复,可能有一些你从未考虑过的记录。如果你有这些数组:

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

然后,为数字45计算的值将为0,因为循环永远不会包含它们。

您有一些代码可以尝试处理y的重复项,但它不会像您期望的那样表现 - 内部循环搜索std2 std1[x]将帮助您前进。