解题思路: 建立两个对象数组,查找arr1中是否含arr2中的id,若有则删除。
注意事项: 判断循环位置时,需要注意删除元素后,arr1的结构发生变化,需要从下标0重新开始查找
参考代码:
import java.util.ArrayList; import java.util.Scanner; public class Main { int id ,score; Main(int id,int score) { this.id=id;this.score=score; } public String toString() { return ""+id+" "+score; } public static void main(String[] args) { Scanner in = new Scanner(System.in); int n=in.nextInt(),m=in.nextInt(); ArrayList<Main> arr1= new ArrayList<Main>(); ArrayList<Main> arr2= new ArrayList<Main>(); for(int i=0;i<n;i++) { arr1.add(new Main(in.nextInt(), in.nextInt())); } for(int i=0;i<m;i++) { arr2.add(new Main(in.nextInt(), in.nextInt())); } int k=0; //用来记录删除节点后的循环起点 while(k<arr1.size()) { int i=k,flag=0; //flag用来标记当前循环是否删除了符合条件的节点 for(int j=0;j<arr2.size();j++) { if(arr1.get(i).id==arr2.get(j).id) { arr1.remove(i); //删除节点 flag=0; //置为0表示arr1数组结构已经改变,需要移动起点k break; }else { flag++; } } if(flag!=0) //如果没删除节点,则起点为k的下一位置k+1 k++; else k=0; //如果删除过节点,则起点重新为0,即从arr1[0]开始查找 } System.out.println(arr1.size()); for(Main o:arr1) System.out.println(o); in.close(); } }
0.0分
0 人评分
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:634 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:626 |
兰顿蚂蚁 (C++代码)浏览:1160 |
C语言程序设计教程(第三版)课后习题5.7 (Java代码)浏览:910 |
【金明的预算方案】 (C++代码)浏览:997 |
哥德巴赫曾猜测 (C语言代码)浏览:2562 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:628 |
1024题解浏览:879 |
关于float,double变量的几点说明浏览:1926 |
输入输出格式练习 (C语言代码)浏览:883 |