Android : 序列化 Parcelable 简单应用

1.Parcelable 介绍

Parcelable 是 Android 提供的一个序列化接口,用于将数据写入 Parcel,以及从 Parcel 中读取数据。一个类只要实现了这个接口,该类的对象就可以被序列化,主要用于 IPC(进程间通信)、Binder 和 Activity 之间的对象传递。

实现 Parcelable 接口需要实现以下方法:

  1. describeContents():这个方法是内容接口描述,默认返回 0 就可以。
  2. writeToParcel(Parcel dest, int flags):该方法将类的数据写入外部提供的 Parcel 中,即打包须要传递的数据到 Parcel 容器保存,以便从 Parcel 容器获取数据。
  3. Parcelable.Creator:这是一个静态的接口,包含两个方法,用于从 Parcel 中构造实现了 Parcelable 的类的实例。

Parcelable 接口的效率比实现 Serializable 接口高,并且支持用于 Intent 数据传递。需要注意的是,只有实现了 Parcelable 接口的类才能被放入 Parcel 中。

2.简单应用 实现跨进程传递数据

使用了dataBinding 简化开发

// 在 build.gradle 文件中加入
android{

    ...
    defaultConfig{
        ...
        //加入
         dataBinding.enabled true
    }

}

1.主页面 activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

        <EditText
            android:id="@+id/etName"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="4dp"
            android:ems="10"
            android:hint="姓名"
            android:inputType="text"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/etAge"
            app:layout_constraintEnd_toStartOf="@+id/guideline4"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="@+id/guideline2"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.059" />

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.1" />

        <EditText
            android:id="@+id/etAge"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="4dp"
            android:ems="10"
            android:hint="年龄"
            android:inputType="number"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/etChinese"
            app:layout_constraintEnd_toEndOf="@+id/etName"
            app:layout_constraintStart_toStartOf="@+id/etName"
            app:layout_constraintTop_toBottomOf="@+id/etName"
            app:layout_constraintVertical_bias="0.182" />

        <EditText
            android:id="@+id/etMaths"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="数学"
            android:inputType="number"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/etEnglish"
            app:layout_constraintEnd_toEndOf="@+id/etChinese"
            app:layout_constraintStart_toStartOf="@+id/etChinese"
            app:layout_constraintTop_toBottomOf="@+id/etChinese" />

        <EditText
            android:id="@+id/etChinese"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="语文"
            android:inputType="numberSigned"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/etMaths"
            app:layout_constraintEnd_toEndOf="@+id/etAge"
            app:layout_constraintStart_toStartOf="@+id/etAge"
            app:layout_constraintTop_toBottomOf="@+id/etAge" />

        <EditText
            android:id="@+id/etEnglish"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="英语"
            android:inputType="number"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/guideline3"
            app:layout_constraintEnd_toEndOf="@+id/etMaths"
            app:layout_constraintStart_toStartOf="@+id/etMaths"
            app:layout_constraintTop_toBottomOf="@+id/etMaths" />

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_percent="0.6" />

        <Button
            android:id="@+id/btnSave"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="保存"
            app:layout_constraintStart_toStartOf="@+id/guideline2"
            app:layout_constraintTop_toTopOf="@+id/guideline3" />

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.7" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

2.跳转的页面 activity_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools">

    <data>

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MenuActivity">

        <EditText
            android:id="@+id/etName"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="4dp"
            android:ems="10"
            android:hint="姓名"
            android:inputType="text"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/etAge"
            app:layout_constraintEnd_toStartOf="@+id/guideline4"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintStart_toStartOf="@+id/guideline2"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.059" />

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.1" />

        <TextView
            android:id="@+id/tvGrade"
            android:layout_width="0dp"
            android:layout_height="77dp"
            android:gravity="center"
            android:hint="等级"
            android:textSize="30sp"
            android:textStyle="bold"
            app:layout_constraintBottom_toTopOf="@+id/guideline3"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.872"
            app:layout_constraintStart_toStartOf="@+id/guideline4"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.047" />

        <EditText
            android:id="@+id/etAge"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="4dp"
            android:ems="10"
            android:hint="年龄"
            android:inputType="number"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/etChinese"
            app:layout_constraintEnd_toEndOf="@+id/etName"
            app:layout_constraintStart_toStartOf="@+id/etName"
            app:layout_constraintTop_toBottomOf="@+id/etName"
            app:layout_constraintVertical_bias="0.182" />

        <EditText
            android:id="@+id/etMaths"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="数学"
            android:inputType="number"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/etEnglish"
            app:layout_constraintEnd_toEndOf="@+id/etChinese"
            app:layout_constraintStart_toStartOf="@+id/etChinese"
            app:layout_constraintTop_toBottomOf="@+id/etChinese" />

        <EditText
            android:id="@+id/etChinese"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="语文"
            android:inputType="numberSigned"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/etMaths"
            app:layout_constraintEnd_toEndOf="@+id/etAge"
            app:layout_constraintStart_toStartOf="@+id/etAge"
            app:layout_constraintTop_toBottomOf="@+id/etAge" />

        <EditText
            android:id="@+id/etEnglish"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:ems="10"
            android:hint="英语"
            android:inputType="number"
            android:textSize="20sp"
            app:layout_constraintBottom_toTopOf="@+id/guideline3"
            app:layout_constraintEnd_toEndOf="@+id/etMaths"
            app:layout_constraintStart_toStartOf="@+id/etMaths"
            app:layout_constraintTop_toBottomOf="@+id/etMaths" />

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            app:layout_constraintGuide_percent="0.6" />

        <androidx.constraintlayout.widget.Guideline
            android:id="@+id/guideline4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintGuide_percent="0.7" />
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

3.Score.java

package com.example.parcelabledemo;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * 序列化 implements Parcelable
 * 用于跨进程传递数据
 */
public class Score implements Parcelable {
    private float math;
    private float english;
    private float chinese;
    private String grade;

    public Score(float math, float english, float chinese) {
        this.math = math;
        this.english = english;
        this.chinese = chinese;
        if (math >= 90 && english >= 90 && chinese >= 90) {
            this.grade = "A";
        } else if (math >= 80 && english >= 80 && chinese >= 80) {
            this.grade = "B";
        } else {
            this.grade = "C";
        }
    }

    protected Score(Parcel in) {
        math = in.readFloat();
        english = in.readFloat();
        chinese = in.readFloat();
        grade = in.readString();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeFloat(math);
        dest.writeFloat(english);
        dest.writeFloat(chinese);
        dest.writeString(grade);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<Score> CREATOR = new Creator<Score>() {
        @Override
        public Score createFromParcel(Parcel in) {
            return new Score(in);
        }

        @Override
        public Score[] newArray(int size) {
            return new Score[size];
        }
    };

    public float getMath() {
        return math;
    }

    public void setMath(float math) {
        this.math = math;
    }

    public float getEnglish() {
        return english;
    }

    public void setEnglish(float english) {
        this.english = english;
    }

    public float getChinese() {
        return chinese;
    }

    public void setChinese(float chinese) {
        this.chinese = chinese;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }
}

4.Student.java

package com.example.parcelabledemo;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * 序列化 implements Parcelable
 * 用于跨进程传递数据
 */
public class Student implements Parcelable {
    private String name;
    private int age;
    private Score score;

    public Student(String name, int age, Score score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    protected Student(Parcel in) {
        name = in.readString();
        age = in.readInt();
        score = in.readParcelable(Score.class.getClassLoader());
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeInt(age);
        dest.writeParcelable(score, flags);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final Creator<Student> CREATOR = new Creator<Student>() {
        @Override
        public Student createFromParcel(Parcel in) {
            return new Student(in);
        }

        @Override
        public Student[] newArray(int size) {
            return new Student[size];
        }
    };

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Score getScore() {
        return score;
    }

    public void setScore(Score score) {
        this.score = score;
    }
}

5. MyApplication.java

package com.example.parcelabledemo;

import android.app.Application;

public class MyApplication extends Application {
    //整个Activity有效 设置全局属性
    // 用于测试 Application不能跨进程传递数据
    Student student;
}

6.MainActivity.java

package com.example.parcelabledemo;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;

import com.example.parcelabledemo.databinding.ActivityMainBinding;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);

        //保存数据跳转页面事件
        binding.btnSave.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                float math = Float.parseFloat(binding.etMaths.getText().toString());
                float english = Float.parseFloat(binding.etEnglish.getText().toString());
                float chinese = Float.parseFloat(binding.etChinese.getText().toString());
                Score score = new Score(math, english, chinese);

                String name = binding.etName.getText().toString();
                int age = Integer.parseInt(binding.etAge.getText().toString());
                Student student = new Student(name, age, score);
                //传递数据
//                MyApplication myApplication = (MyApplication) getApplication();
//                myApplication.student = student;

                //意图跳转页面
                Intent intent = new Intent(MainActivity.this, MenuActivity.class);
                //bundle 传递 Parcelable 数据
                Bundle bundle = new Bundle();
                bundle.putParcelable("studentData", student);
                intent.putExtra("data", bundle);
                //跳转
                startActivity(intent);
            }
        });
    }
}

7.MenuActivity.java

package com.example.parcelabledemo;

import android.content.Intent;
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;

import com.example.parcelabledemo.databinding.ActivityMenuBinding;

public class MenuActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
//        setContentView(R.layout.activity_menu);
        ActivityMenuBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_menu);
        //获取数据
        Intent intent = getIntent();
        Bundle bundle = intent.getBundleExtra("data");
        Student student = bundle.getParcelable("studentData");

//        MyApplication myApplication = (MyApplication) getApplication();
//        Student student = myApplication.student;

        binding.etName.setText(student.getName());
        binding.etAge.setText(String.valueOf(student.getAge()));
        binding.etChinese.setText(String.valueOf(student.getScore().getChinese()));
        binding.etMaths.setText(String.valueOf(student.getScore().getMath()));
        binding.etEnglish.setText(String.valueOf(student.getScore().getEnglish()));
        binding.tvGrade.setText(student.getScore().getGrade());
    }
}

8.AndroidManifest.xml        创建新进程测试数据传递

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- 引用全局变量  android:name=".MyApplication" -->
    <application
        android:name=".MyApplication"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Parcelabledemo">

        <!--   android:process=":process2" 创建一个新的进程 -->
        <activity
            android:name=".MenuActivity"
            android:process=":process2"
            android:exported="false" />
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/240638.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

产品经理之如何编写竞品分析(医疗HIS系统管理详细案例模板)

目录 一.项目周期 二.竞品分析的目的 三.竞品分析包含的维度 四.如何选择竞品 五.竞品画布 六.案例模板 一.项目周期 在整个项目的周期&#xff0c;产品经理所做的事情主要在项目前期做市场分析、需求调研等&#xff0c;下面一张图概况了整个项目周期产品经理、开发工程师…

网络安全——Iptables防DDoS攻击实验

一、实验目的要求&#xff1a; 二、实验设备与环境&#xff1a; 三、实验原理&#xff1a; 四、实验步骤&#xff1a; 五、实验现象、结果记录及整理&#xff1a; 六、分析讨论与思考题解答&#xff1a; 一、实验目的要求&#xff1a; 1、掌握常见DDoS攻击SYN Flood的攻击…

gdb本地调试版本移植至ARM-Linux系统

移植ncurses库 本文使用的ncurses版本为ncurses-5.9.tar.gz 下载地址&#xff1a;https://ftp.gnu.org/gnu/ncurses/ncurses-5.9.tar.gz 1. 将ncurses压缩包拷贝至Linux主机或使用wget命令下载并解压 tar-zxvf ncurses-5.9.tar.gz 2. 解压后进入到ncurses-5.9目录…

解决员工安全隐患的终极方案!迅软DSE答疑员工终端安全管控策略揭秘!

企业终端安全管控对于企事业单位来说至关重要。迅软DSE终端安全系统提供了丰富的终端安全桌面管理策略&#xff0c;可以对终端用户的上网行为和终端操作行为进行管理和控制&#xff0c;从而实现桌面终端的标准化管理&#xff0c;解决终端安全管理问题&#xff0c;并提高员工工作…

阿里云SLB的使用总结

一、什么是SLB 实现k8s的服务service的一种推荐方式&#xff0c;也是服务上云后&#xff0c;替代LVS的一个必选产品。 那么它有什么作用呢&#xff1f; 1、负载均衡&#xff0c;是它与生俱来的。可以配置多个服务器组&#xff1a;包括虚拟服务器组、默认服务器组、主备服务器…

小程序使用Nodejs作为服务端,Nodejs与与MYSQL数据库相连

小程序使用Nodejs作为服务端,Nodejs与与MYSQL数据库相连 一、搭建环境二、配置Nodejs三、与小程序交互四、跨域处理/报错处理五、nodejs连接mysql数据库六、微信小程序连接nodejs报错七、小程序成功与服务端相连,且能操作数据库一、搭建环境 新建空文件夹:Win + R进入cmd命令…

C++STL的list模拟实现

文章目录 前言 list实现push_back迭代器(重点)普通迭代器const迭代器 inserterase析构函数构造函数拷贝构造赋值 vector和list的区别 前言 要实现STL的list, 首先我们还得看一下list的源码。 我们看到这么一个东西&#xff0c;我们知道C兼容C&#xff0c;可以用struct来创建一…

Quartus II + Modelsim 脚本仿真

软件版本&#xff1a;Intel Quartus Prime Design Suite: 23.2 方式参考附件Intel 官方文档&#xff1a;Questa*-Intel FPGA Edition Quick-Start: Intel Quartus Prime Pro Edition 第1步&#xff0c;创建一个ram ip&#xff0c;并形成一个例化的top层ip 第2步&#xff0c;自…

独立完成软件的功能的测试(2)

独立完成软件的功能的测试&#xff08;2&#xff09; &#xff08;12.13&#xff09; 1. 对穷举场景设计测试点&#xff08;等价类划分法&#xff09; 等价类划分法的概念&#xff1a; 说明&#xff1a;数据有共同特征&#xff0c;成功失败分类&#xff1a; 有效&#xff1a…

FPGA使用乘法的方式

FPGA使用乘法的方式 方法一:直接使用乘法符“*” 源代码 module multiply(input [7:0] a,input [7:0] b,output wire [15:0] result);(*use_dsp48 = "yes"*) wire [15:0] result;assign result = a*b; endmodule仿真代码 module multiply_tb();reg [7:0] a; re…

大象慧云:从设立分部到迁移总部 与贵阳贵安共筑税务数字化未来

近年来&#xff0c;贵阳贵安着力提升政务服务水平&#xff0c;通过擦亮“贵人服务”品牌&#xff0c;持续优化营商环境。在这样的环境下&#xff0c;再加上“大数据基因”&#xff0c;对于希望在大数据领域大展拳脚的企业来说&#xff0c;贵阳贵安无疑成为了一个极具吸引力的选…

MySQL笔记-第11章_数据处理之增删改

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第11章_数据处理之增删改1. 插入数据1.1 实际问题1.2 方式1&#xff1a;VALUES的方式添加1.3 方式2&#xff1a;将查询结果插入到表中 2. 更…

C语言—每日选择题—Day46

第一题 1. 下列程序段的输出结果是&#xff08;&#xff09; #include <stdio.h> int main() {int x 1,a 0,b 0;switch(x) {case 0: b;case 1: a;case 2: a;b;}printf("a%d,b%d\n", a, b);return 0; } A&#xff1a;a2,b1 B&#xff1a;a1,b1 C&#xf…

CGAL的3D Alpha Wrapping

1、介绍 几何建模和处理中的各种任务都需要将三维对象表示为有效的曲面网格&#xff0c;其中“有效”指的是不透水、无交叉、可定向和2流形的网格。这样的表示提供了内部/外部和测地线邻域的定义良好的概念。 3D数据通常是通过测量和重建获得的&#xff0c;由人类设计&#xff…

深入理解网络 I/O 多路复用:Epoll

&#x1f52d; 嗨&#xff0c;您好 &#x1f44b; 我是 vnjohn&#xff0c;在互联网企业担任 Java 开发&#xff0c;CSDN 优质创作者 &#x1f4d6; 推荐专栏&#xff1a;Spring、MySQL、Nacos、Java&#xff0c;后续其他专栏会持续优化更新迭代 &#x1f332;文章所在专栏&…

【FPGA】综合设计练习题目

前言 这是作者这学期上的数电实验期末大作业的题目&#xff0c;综合性还是十分强的&#xff0c;根据组号作者是需要做“4、篮球比赛计分器”&#xff0c;相关代码会在之后一篇发出来&#xff0c;这篇文章用于记录练习题目&#xff0c;说不定以后有兴趣或者有时间了回来做做。 …

随机拆分文件夹划分训练验证集

import os from shutil import copy, rmtree import randomdef mk_file(file_path: str):if os

智能优化算法应用:基于鸟群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于鸟群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于鸟群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.鸟群算法4.实验参数设定5.算法结果6.参考文献7.MA…

数据中心到底是如何工作的?

数字时代的数据中心&#xff0c;就如同网络世界的心脏&#xff0c;它的鼓动关系到整个网络生态的运转。但这个复杂而庞大的数据枢纽背后隐藏着怎样的精密机制&#xff0c;是许多人颇感好奇的谜。 数字时代的数据中心&#xff0c;就如同网络世界的心脏&#xff0c;它的鼓动关系…

【CSP】202303-1_田地丈量Python实现

文章目录 [toc]试题编号试题名称时间限制内存限制问题描述输入格式输出格式样例输入样例输出样例解释子任务Python实现 试题编号 202303-1 试题名称 田地丈量 时间限制 1.0s 内存限制 512.0MB 问题描述 西西艾弗岛上散落着 n n n块田地&#xff0c;每块田地可视为平面直角坐标…