2020-12-30

JAVA数组(Array)(更新中。。。)


数组的概述

是多个相同数据类型,按一定顺序排列的集合,并使用一个名字命名,通过编号的方式进行统一管理。

数组的常见概念

  • 数组名
  • 元素
  • 下标(索引)
  • 数组长度

数组的特点

  • 数组是有序排列的
  • 数组是引用数据类型的变量,数组元素可以是基本数据类型,也可以是引用数据类型
  • 创建数组会在内存中开辟一整块连续的内存空间
  • 数组的长度一旦确定,就不能修改

数组的分类

  • 按维数分类:一维数组、二维数组
  • 按元素的类型:基本数据类型、引用数据类型

一维数组的使用

  • 声明和初始化
  • 调用数组指定的元素
  • 获取数组的长度
  • 遍历数组
  • 数组元素的默认初始化
  • 数组的内存解析
public class ArrayTest{
	//静态初始化
    int[] ids;//声明
    ids = new int[]{1,2,3,4,5}//初始化
    //动态初始化
    String[] names = new String[5];
    //数组索引
    names[0] = "jinwennan";
    names[1] = "xuxinyao";
    names[2] = "songqigang";
    //获取数组长度
    System.out.pringln(names.length);
    //遍历数组
    for(int i = 0;i < names.length;i++){
        System.out.println(names[i]);
    }
    //数组元素默认初始化值
    int[] arr = new int[5]
    for(i = 0;i < arr.length;i++){
        System.out.println(arr[i]);//输出结果0 0 0 0;
    }
    //整数型默认;0
    //浮点数默认值:0.0
    //布尔型默认值:false
    //char型默认值:0 ,而非'0';
    //引用数据类型:null;
    
}
数组内存解析流程图

在这里插入图片描述

二维数组内存解析

在这里插入图片描述

数组排序和算法

杨辉三角

在这里插入图片描述

//杨辉三角
    @Test
    public void test02() {

        //声明二维数组
        int[][] yangHui = new int[10][];

        for (int i = 0; i < yangHui.length; i++) {

            yangHui[i] = new int[i + 1];
        }
        //赋值
        for (int i = 0; i < yangHui.length; i++) {

            yangHui[i][0] = 1;
            yangHui[i][i] = 1;
        }

        for (int i = 2; i < yangHui.length; i++) {

            for (int j = 1; j < yangHui[i].length - 1; j++) {

                yangHui[i][j] = yangHui[i - 1][j - 1] + yangHui[i - 1][j];
            }
        }

        //遍历输出
        for (int i = 0; i < yangHui.length; i++) {

            for (int j = 0; j < yangHui[i].length; j++) {

                System.out.print(yangHui[i][j] + "\t");
            }
            System.out.println();
        }
    }
数组的最大值、求和
 @Test
    public void test03() {

        int[] arr = new int[10];//声明数组

        //赋值
        //[a,b]区间的随机数:Math.random() * (b - a + 1) + a
        for (int i = 0; i < arr.length; i++) {

            arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10);

            System.out.print(arr[i] + "\t");
        }
        System.out.println();

        //求最大值
        int maxValue = 0;
        for (int i = 0; i < arr.length; i++) {

            if (maxValue < arr[i]) {

                maxValue = arr[i];
            }
        }
        System.out.println("求最大值:" + maxValue);

        //求和
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {

            sum += arr[i];
        }
        System.out.println("求和:" + sum);
    }
数组的复制
//数组的复制
    @Test
    public void test04() {

        int[] arr = new int[10];

        for (int i = 0; i < arr.length; i++) {

            arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10);

            System.out.print(arr[i] + "\t");
        }
        System.out.println();

        int[] arr1 = new int[arr.length];

        for (int i = 0; i < arr1.length; i++) {

            arr1[i] = arr[i];

            System.out.print(arr1[i] + "\t");
        }
    }
数组的反转
//数组的反转
    @Test
    public void test05() {

        int[] arr = new int[10];

        for (int i = 0; i < arr.length; i++) {

            arr[i] = (int) (Math.random() * (99 - 10 + 1) + 10);

            System.out.print(arr[i] + "\t");
        }
        System.out.println();

        for (int i = 0; i < arr.length / 2; i++) {

            int temp = arr[i];
            arr[i] = arr[arr.length - i - 1];
            arr[arr.length - i - 1] = temp;
        }

        for (int i = 0; i < arr.length; i++) {

            System.out.print(arr[i] + "\t");
        }
    }
冒泡排序
//冒泡排序
    @Test
    public void test06() {

        int[] arr = new int[10];

        for (int i = 0; i < arr.length; i++) {

            arr[i] = (int) (Math.random() * (99 - 1 + 1) + 1);

            System.out.print(arr[i] + "\t");
        }
        System.out.println();

        for (int i = 0; i < arr.length - 1; i++) {

            for (int j = 0; j < arr.length - 1 - i; j++) {

                if (arr[j] > arr[j + 1]) {

                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }

        for (int i = 0; i < arr.length; i++) {

            System.out.print(arr[i] + "\t");
        }
### 回答1: 可以使用Python中的pandas库将时间序列数据存储到DataFrame中,然后使用pandas的to_excel()方法将其输出到Excel文件中。 首先,需要使用pandas中的date_range()函数生成时间索引,确定时间范围从2018-01-01 08:00:00到2020-12-30 00:00:00,每小时取一个值。 其次,使用pandas中的DataFrame()函数创建一个新的DataFrame并将时间索引设置为刚才生成的时间索引。 最后,使用DataFrame的to_excel()方法将其输出到Excel文件中。 代码示例如下: ``` python import pandas as pd # 生成时间索引 time_index = pd.date_range('2018-01-01 08:00:00', '2020-12-30 00:00:00', freq='H') # 创建新的DataFrame并将时间索引设置为刚才生成的时间索引 df = pd.DataFrame(index=time_index) # 输出到Excel文件 df.to_excel('output.xlsx') ``` ### 回答2: 首先,我们需要计算从2018年1月1日08:00:00到20201230日00:00:00的总小时数。我们可以使用日期时间函数来完成这个计算。 首先,计算起始日期和结束日期之间的总天数。起始日期是2018年1月1日08:00:00,结束日期是20201230日00:00:00。计算这两个日期之间的天数,可以使用以下公式: =end_date - start_date + 1 其中,"+1"是因为起始日期所占的一天也要计算在内。 接下来,计算总小时数。因为每天有24小时,所以总小时数等于总天数乘以24。公式如下: total_hours = total_days * 24 现在我们知道了从起始日期到结束日期的总小时数,我们可以使用循环来逐小时生成日期时间,并将其写入Excel文件。我们可以使用Python中的openpyxl库来实现这个功能。 首先,导入必要的库: import openpyxl from datetime import datetime, timedelta 然后,创建一个新的Excel工作簿: workbook = openpyxl.Workbook() sheet = workbook.active 接下来,设置起始日期和结束日期: start_date = datetime(2018, 1, 1, 8, 0, 0) end_date = datetime(2020, 12, 30, 0, 0, 0) 然后,用循环生成连续的日期时间,并将其写入Excel文件: current_date = start_date for i in range(total_hours): sheet.cell(row=i+1, column=1).value = current_date current_date += timedelta(hours=1) 最后,保存Excel文件: workbook.save('output.xlsx') 以上就是将2018年1月1日08:00:00到20201230日00:00:00的连续时间每小时取一个值,并输出为Excel文件的步骤。 ### 回答3: 要将2018-01-01 08:00:00到2020-12-30 00:00:00这个时间范围内每小时连续取一个值,并输出到Excel文件中,可以使用Python编程语言中的pandas和openpyxl库来实现。 首先,我们需要导入所需的库: ```python import pandas as pd from openpyxl import Workbook ``` 接下来,我们可以创建一个日期范围,从2018-01-01 08:00:00到2020-12-30 00:00:00,每小时的频率,并将其存储在一个DataFrame中: ```python start_date = pd.Timestamp('2018-01-01 08:00:00') end_date = pd.Timestamp('2020-12-30 00:00:00') date_range = pd.date_range(start=start_date, end=end_date, freq='1H') df = pd.DataFrame(date_range, columns=['Timestamp']) ``` 然后,我们可以向DataFrame中添加其他需要的列,例如年、月、日和小时: ```python df['Year'] = df['Timestamp'].dt.year df['Month'] = df['Timestamp'].dt.month df['Day'] = df['Timestamp'].dt.day df['Hour'] = df['Timestamp'].dt.hour ``` 最后,我们可以使用openpyxl库将DataFrame保存到Excel文件中: ```python output_file = 'output.xlsx' with pd.ExcelWriter(output_file, engine='openpyxl') as writer: df.to_excel(writer, index=False) ``` 完整的代码如下: ```python import pandas as pd from openpyxl import Workbook start_date = pd.Timestamp('2018-01-01 08:00:00') end_date = pd.Timestamp('2020-12-30 00:00:00') date_range = pd.date_range(start=start_date, end=end_date, freq='1H') df = pd.DataFrame(date_range, columns=['Timestamp']) df['Year'] = df['Timestamp'].dt.year df['Month'] = df['Timestamp'].dt.month df['Day'] = df['Timestamp'].dt.day df['Hour'] = df['Timestamp'].dt.hour output_file = 'output.xlsx' with pd.ExcelWriter(output_file, engine='openpyxl') as writer: df.to_excel(writer, index=False) ``` 运行这段代码将生成一个名为output.xlsx的Excel文件,其中包含从2018-01-01 08:00:00到2020-12-30 00:00:00每小时连续取一个值的数据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jinwennan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值