Java中的值匹配和缩小维度

时间:2018-08-26 08:58:02

标签: java arrays file

我有一个数据文件,其中包含两个主题的分数。

文件看起来像这样

Sl_No:Marks1 Marks2

1      10       20
2      10       20
3      10       20
4      10       20  
5      10       10
6      20       10
7      20       10
8      20       10
9      20       30
10     20       22
11     21       22
12     21       22
13     21       23
14     10       20
15     10       20

现在我的目标是,每当获得相同的价值时,就添加这个标记。因此,按照我的示例,sl_no 1到4具有相同的值对(10,20)。因此,Marks1返回40,marks2返回80。 Sl_No:5与sl_no:4不匹配,因此保持不变。序列号:6到8具有匹配的对,因此返回60和30。Sl_no:9.0和10.0没有匹配,因此保持不变。 Sl_no:11和12匹配,因此返回42和44。sl_no:14和15匹配,因此返回20和40。

所需的输出:

4  40  80
5  10  10
8  60  30
9  20  30
10 20  22
12 42  44
13 21  23
15 20  40

我的代码:

public class Marksmatch {
public static void main(String args[]){
    int []sl_no={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
    int []Marks1={10,10,10,10,10,20,20,20,20,20,21,21,21,10,10};
    int []Marks2={20,20,20,20,10,10,10,10,30,22,22,22,23,20,20};
    int addMarks1=0,addMarks2=0;
    for(int i=0;i<sl_no.length-1;i++){
        if(Marks1[i]== Marks1[i+1]&&Marks2[i]==Marks2[i+1]){
            addMarks1=addMarks1+Marks1[i+1];
            addMarks2=addMarks2+Marks2[i+1];
            System.out.println(addMarks1);
            System.out.println(addMarks2);
        }
    }

}

}

输出:   10 20 20 40 30 60 50 70 70 80 91 102 101 122

它没有给我欲望输出。我该如何进行?

1 个答案:

答案 0 :(得分:1)

您的逻辑是错误的。您应该跟踪当前组的总和,并且仅在完成该组后才打印它们:

int addMarks1=Marks1[0],addMarks2=Marks2[0]; // initialize the sums of the first group
for(int i=0;i<sl_no.length-1;i++){
    if(Marks1[i]== Marks1[i+1] && Marks2[i]==Marks2[i+1]) {
        // add to the current group
        addMarks1=addMarks1+Marks1[i+1];
        addMarks2=addMarks2+Marks2[i+1];
    } else {
        // print the previous group and start a new group
        System.out.println(sl_no[i] + " " + addMarks1 + " " + addMarks2);
        addMarks1=Marks1[i+1];
        addMarks2=Marks2[i+1];
    }
}
// print the last group
System.out.println(sl_no[sl_no.length-1] + " " + addMarks1 + " " + addMarks2)

输出:

4 40 80
5 10 10
8 60 30
9 20 30
10 20 22
12 42 44
13 21 23
15 20 40