我有一个数据文件,其中包含两个主题的分数。
文件看起来像这样
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
它没有给我欲望输出。我该如何进行?
答案 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