30、数组与对象编程入门

数组与对象编程入门

数组基础与线性搜索

数组是一种重要的数据结构,它由固定数量的相同类型的元素按特定顺序排列组成。数组中的每个项被称为元素,我们可以使用特定的值来声明和初始化数组。数组的元素通过索引(也称为下标)来引用,索引从 0 开始。

例如,有一个字符串数组,其内容可以通过 printArray() 函数在控制台输出:

[0] "George"
[1] "John"
[2] "Tom"

在数组操作中,线性搜索是一种常见的操作,用于查找数组中特定的值。虽然它效率不高,但实现简单。以下是实现线性搜索的步骤:
1. 创建新程序 :选择“文件”>“新建”,将程序保存为 LinearSearch
2. 定义数组和搜索值

int[] temperatures = {57, 10, 32, 78, 212, 101};
int seeking = 78;
println("Searching for: " + seeking);
  1. 使用 for 循环遍历数组
for (int count = 0; count < temperatures.length; count = count + 1) {
    println("temperatures[" + count + "] = " + temperatures[count] );
}
  1. 检查当前元素是否为搜索值
for (int count = 0; count < temperatures.length; count = count + 1) {
    println("temperatures[" + count + "] = " + temperatures[count] );
    if (temperatures[count] == seeking) {
        println(seeking + " has been found at [" + count + "]");
    }
}
println("end of search");
  1. 允许用户输入搜索值
import static javax.swing.JOptionPane.*;
int[] temperatures = {57, 10, 32, 78, 212, 101};
String input;
input = showInputDialog("Enter temperature for search:");
int seeking;
seeking = int(input);
println("Searching for: " + seeking);
for (int count = 0; count < temperatures.length; count = count + 1) {
    println("temperatures[" + count + "] = " + temperatures[count] );
    if (temperatures[count] == seeking) {
        println(seeking + " has been found at [" + count + "]");
    }
}
println("end of search");

数组的一些重要特性总结如下:
| 特性 | 描述 |
| ---- | ---- |
| 索引 | 从 0 开始,用于引用数组元素 |
| 内存存储 | 数组变量存储数组在计算机内存中的地址 |
| 越界异常 | 使用大于或等于数组长度的索引会导致异常 |
| 循环处理 | for 循环常用于处理数组 |
| 相关函数 | Processing 提供了 printArray() min() max() 等函数 |

数组练习

以下是一些关于数组的练习,帮助巩固对数组的理解:
1. 声明并显示默认元素
- 声明一个包含七个 int 值的数组,并在控制台显示默认元素。
- 声明一个包含 15 个 float 值的数组,并在控制台显示默认元素。
2. 创建特定数组并显示
- 创建一个存储五个元音字符的数组,并在控制台显示元素。
- 创建一个存储一周七天名称的数组,并在控制台显示元素。
3. 声明、初始化并显示数组
- 声明并初始化一个包含 0, 15, 20, 35, 45, 50, 70 的数组,并在控制台显示元素。
- 修订上述程序,使用 for 循环按特定格式输出元素。
- 修订程序,计算并显示元素的总和。
- 修订程序,计算并显示元素的平均值。
4. 随机填充数组并显示
- 声明一个包含 10 个整数的数组,用 1 到 100 之间的随机整数填充,并在控制台显示元素。
- 修订程序,使用 max() min() 函数找出最大和最小元素并显示。
5. 图形绘制相关数组操作
- 设置画布大小为 150 像素宽、200 像素高。
- 声明 columns rows 数组,分别存储五个整数。
- 用 0 到画布宽度的随机整数填充 columns 数组,用 0 到画布高度的随机整数填充 rows 数组。
- 在控制台显示每对 row column 的值。
- 以 columns 数组元素为圆心列数, rows 数组元素为圆心行数,绘制直径为 20 的圆。

对象编程基础

在编程中,除了处理基本数据类型,我们还可以处理数据对象,如 String 对象和数组。通过创建新的类,我们可以创建自己的对象类型。

理解对象

在 Processing 中,对象可以将属性和方法捆绑在一起:
- 属性 :存储关于对象的信息的变量。
- 方法 :使对象能够执行涉及对象属性的某些操作的函数。

例如,一个秒表涉及信息(如经过的时间)和通过涉及该信息的操作(如按下重置按钮重置经过的时间)的使用。

定义新对象类型

以下是创建新对象类型(以 Circle 类为例)的步骤:
1. 创建新程序 :选择“文件”>“新建”,将程序保存为 ObjectsAndClasses
2. 设置画布

void setup() {
    size(200, 200);
}
  1. 定义类
class Circle {
    int column;
    int row;
    int diameter;

    void render() {
        ellipse(column, row, diameter, diameter);
    }
}

在这个 Circle 类中,每个 Circle 对象都有三个属性变量: column row diameter ,以及一个 render() 方法用于在画布上绘制圆。

实例化对象

创建 Circle 对象的步骤如下:
1. 声明变量

void setup() {
    size(200, 200);
    Circle littleCircle;
}
  1. 使用 new 运算符创建对象
void setup() {
    size(200, 200);
    Circle littleCircle;
    littleCircle = new Circle();
}
  1. 验证对象地址
void setup() {
    size(200, 200);
    Circle littleCircle;
    littleCircle = new Circle();
    print(littleCircle);
}

运行程序后,控制台会输出对象的内存地址。

设置对象属性

默认情况下, littleCircle 对象的属性变量初始化为 0。我们可以使用点号表示法来更改这些属性:

littleCircle.column = 30;
littleCircle.row = 50;
littleCircle.diameter = 20;

通过以上内容,我们学习了数组的基本操作和线性搜索,以及如何定义、实例化对象并设置对象属性,为进一步的编程学习打下了基础。

数组与对象编程入门

数组操作的深入理解

在前面我们已经了解了数组的基本操作和线性搜索,接下来我们可以更深入地探讨数组在实际应用中的一些特点和优势。

数组在处理大量相同类型的数据时非常高效,因为它可以通过索引快速访问元素。例如,在处理温度数据时,我们可以使用数组来存储一系列的温度值,然后通过索引来获取特定位置的温度。

int[] temperatures = {57, 10, 32, 78, 212, 101};
int specificTemperature = temperatures[3]; // 获取索引为 3 的温度值,即 78

另外,数组还可以与函数结合使用,将数组作为参数传递给函数,实现更复杂的功能。例如,我们可以编写一个函数来计算数组中元素的总和:

int[] temperatures = {57, 10, 32, 78, 212, 101};
int sum = calculateSum(temperatures);

int calculateSum(int[] arr) {
    int total = 0;
    for (int i = 0; i < arr.length; i++) {
        total += arr[i];
    }
    return total;
}
对象编程的进一步应用

在了解了对象的基本概念、类的定义、对象的实例化和属性设置后,我们可以进一步探讨对象编程在实际中的应用。

对象编程的一个重要优势是封装性,它可以将数据和操作数据的方法封装在一起,提高代码的安全性和可维护性。例如,在 Circle 类中,我们将圆的属性( column row diameter )和绘制圆的方法( render() )封装在一起,外部代码只需要调用 render() 方法就可以绘制圆,而不需要关心圆的具体实现细节。

class Circle {
    private int column;
    private int row;
    private int diameter;

    public Circle(int col, int r, int d) {
        column = col;
        row = r;
        diameter = d;
    }

    public void render() {
        ellipse(column, row, diameter, diameter);
    }
}

void setup() {
    size(200, 200);
    Circle littleCircle = new Circle(30, 50, 20);
    littleCircle.render();
}

在这个例子中,我们使用了构造函数 Circle(int col, int r, int d) 来初始化圆的属性,并且将属性设置为 private ,这样外部代码就不能直接访问和修改这些属性,只能通过类提供的方法来操作。

数组与对象的结合使用

在实际编程中,我们经常会将数组和对象结合使用。例如,我们可以创建一个存储 Circle 对象的数组,然后对这些圆进行批量操作。

class Circle {
    private int column;
    private int row;
    private int diameter;

    public Circle(int col, int r, int d) {
        column = col;
        row = r;
        diameter = d;
    }

    public void render() {
        ellipse(column, row, diameter, diameter);
    }
}

void setup() {
    size(200, 200);
    Circle[] circles = new Circle[3];
    circles[0] = new Circle(30, 50, 20);
    circles[1] = new Circle(80, 100, 30);
    circles[2] = new Circle(130, 150, 40);

    for (int i = 0; i < circles.length; i++) {
        circles[i].render();
    }
}

在这个例子中,我们创建了一个包含 3 个 Circle 对象的数组,然后通过 for 循环遍历数组,调用每个 Circle 对象的 render() 方法,实现了多个圆的绘制。

总结与展望

通过本文的学习,我们掌握了数组的基本操作、线性搜索,以及对象编程的基本概念、类的定义、对象的实例化和属性设置。数组和对象是编程中非常重要的概念,它们在处理数据和实现复杂功能方面发挥着重要作用。

在未来的学习中,我们可以进一步学习数组的排序、搜索算法,以及对象编程中的继承、多态等高级特性,这些知识将帮助我们编写更加高效、复杂的程序。

以下是一个简单的流程图,展示了创建 Circle 对象并绘制的流程:

graph TD;
    A[开始] --> B[定义 Circle 类];
    B --> C[设置画布大小];
    C --> D[声明 Circle 数组];
    D --> E[实例化 Circle 对象并存储到数组];
    E --> F[遍历数组并调用 render() 方法];
    F --> G[结束];

同时,为了更好地理解数组和对象的关系,我们可以用表格来对比它们的特点:
| 类型 | 特点 |
| ---- | ---- |
| 数组 | 存储相同类型的元素,通过索引访问,处理大量数据高效 |
| 对象 | 封装属性和方法,提高代码安全性和可维护性,支持继承和多态 |

希望本文能够帮助你更好地理解数组和对象编程的基础知识,为你在编程的道路上迈出坚实的一步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值