CCF CSP 201403-2 窗口(Java-100分)

本文是作者作为Java初学者对于CCF CSP 201403问题的解题分享,主要介绍如何模拟窗口操作,通过鼠标点击改变窗口层次顺序。解题思路包括自定义窗口和鼠标点击坐标类,按顺序判断并调整窗口层级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小白一枚,刚学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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值