小白一枚,刚学Java没多久,所以下述解法很简单,仅作参考,肯定有许多不足以及理解不到位之处,欢迎大神指正。
题目描述
题意分析
类似于我们同时打开几个窗口,通过鼠标点击来确定当前要操作的那个窗口对象,同时调整各个窗口间的层次顺序
解题思路
1.自定义2个类,分别存储窗口坐标和鼠标点击坐标。
2.由于按照从最下层到最顶层的顺序给出窗口的位置,所以每个点击位置依次从最上面的窗口到最下面的窗口进行坐标判断即可。
3.需要注意的点:如果鼠标点击选定的是处于中间层次的窗口,那么将此窗口对象重新加入到list中,去除原来的窗口对象,实现层次的调整。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
Window w = null;
Click c = null;
List <Window> list = new ArrayList<>(n);
List <Click> list1 = new ArrayList<>(m);
for (int i = 0; i < n; i++) {
w = new Window(sc.nextInt(),sc.nextInt(),sc.nextInt(),sc.nextInt());
w.num = i + 1;
list.add(w);
}
for (int i = 0; i < m; i++) {
c = new Click(sc.nextInt(),sc.nextInt());
list1.add(c);
}
int x,y;
int x1,y1,x2,y2;
for (int i = 0; i < list1.size(); i++) {
x = list1.get(i).x;
y = list1.get(i).y;
for (int j = list.size() - 1; j >= 0; j--) {
x1 = list.get(j).x1;
y1 = list.get(j).y1;
x2 = list.get(j).x2;
y2 = list.get(j).y2;
if((x-x1)*(x-x2)<=0 && (y-y1)*(y-y2)<=0){
System.out.println(list.get(j).num);
w = new Window(x1,y1,x2,y2);
w.num = list.get(j).num;
list.add(w);
list.remove(j);
break;
}
if(j == 0){
System.out.println("IGNORED");
}
}
}
}
}
class Window{
int x1,y1,x2,y2;
int num = 0;
public Window(int x1, int y1, int x2, int y2) {
this.x1 = x1;
this.y1 = y1;
this.x2 = x2;
this.y2 = y2;
}
public Window() {
}
}
class Click{
int x,y;
public Click() {
}
public Click(int x, int y) {
this.x = x;
this.y = y;
}
}