java基础-day03-数组
创始人
2025-05-29 23:16:06

数组定义

题目1:

public class Hw1{public static void main(String[] args){char[] c1 = new char[26];c1[0] = 'A';for (int i = 1; i <= 25; i++){c1[i] = (char)(c1[0] + i);}System.out.println(c1);
//自己写的烂方法:char[] c2 = new char[26];for (int i = 0; i < c2.length; i++){c2[i] = 'A' + i;}System.out.println(c2);
// 老师给的牛犇的方法}
}

题目2:

public class Hw1{public static void main(String[] args){int[] a = {4, -1, 9, 10, 23};int max = a[0];int indx = 0;for (int i = 0; i < a.length; i++){if (max <= a[i]){max = a[i];indx = i;}}System.out.println("最大值是"+max+" 下标是"+indx);}
}

数组赋值

数组的拷贝

将int[] arr1 = {1, 2, 3} 拷贝到arr2数组,要求数据空间是独立的

  1. 创立新的数组,开辟新空间

  1. 遍历arr1,把每个元素拷贝到arr2的对应位置

数组翻转

思路1:注意吧len = arr.length

public class Hw1{public static void main(String[] args){int[] arr = {11, 22, 33, 44, 55, 66};//把arr[1]和arr[5]交换,//  arr[2]和arr[4]交换...int len = arr.length;for(int i = 0; i < len / 2; i++){int temp = arr[i];arr[i] = arr[len - i - 1];arr[len - i - 1] = temp;}for(int i = 0; i < len; i++){System.out.println(arr[i]);}}
}

思路2:逆序赋值法

  1. 先开辟一个新的数组

  1. 逆序遍历arr1, 顺序遍历新数组,把arr1的那个数据反着传给新数组

  1. 记得要把arr2的地址给到arr1,不然arr1没改变,然后会被java垃圾回收机制收走

  1. 注意:主要是那个arr2的下标用j,仔细看一下

public class Hw1{public static void main(String[] args){int[] arr1 = {11, 22, 33, 44, 55, 66};int[] arr2 = new int[arr1.length];for(int i = arr1.length - 1, j = 0; i >= 0; i--, j++){arr2[j] = arr1[i];}arr1 = arr2;for (int i = 0; i < arr2.length; i++){System.out.print(arr1[i]+"\t");}}
}

数组扩容

要求:给arr添加内容,先问用户要不要添加,y/n

思路:

  1. 开辟新数组,长度是原数组+1,把原数组依次赋值

  1. 在屁股上加一个

  1. 改指针

  1. 用do-while + break控制用户要不要添加

import java.util.Scanner;
public class Lianxi{public static void main(String[] args){int arr[] = {1, 2, 3};do{Scanner myScanner = new Scanner(System.in);System.out.println("请问您是否要为数组添加一个数据?");char key = myScanner.next().charAt(0);if (key == 'n'){break;}int[] arr2 = new int[arr.length + 1];System.out.println("请输入您要添加的数据?");int num = myScanner.nextInt();for (int i = 0; i < arr.length; i++){arr2[i] = arr[i];}arr2[arr2.length - 1] = num;arr = arr2;for (int i = 0; i < arr2.length; i++){System.out.print(arr2[i] + "\t");}} while(true);}
}

数组缩减

排序

冒泡排序:外层控制我们一共要比较多少轮,内层控制从第0个数开始,要比多少次

import java.util.Scanner;
public class Lianxi{public static void main(String[] args){int arr[] = {2, 10, 7, 5, 8, 6, 9};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");}}
}

查找

注意:有个小技巧,初始化index=-1来表示没有找到匹配的

import java.util.Scanner;
public class Lianxi{public static void main(String[] args){String[] names = {"hy", "lwj", "dxy", "tl", "zsq"};Scanner myScanner = new Scanner(System.in);System.out.println("请输入您要查找的字符串:");String name = myScanner.next();//技巧:index = -1 int index = -1;for (int i = 0; i < names.length; i++){if(name.equals(names[i])){index = i;System.out.println(name + "是第" + i +"个字符串");}}if(index == -1){System.out.println("没找到" + name);}}
}

二维数组

定义:原来每个一维数组的每个元素是一维数组,就构成二维数组

第一个表示二维数组里面有几个一维数组,第二个表示每个一维数组里面有几个元素

二维数组在内存里面的存在形式:

ok,现在打印出图片中的数组:

public class Lianxi{public static void main(String[] args){int[][] arr = new int[3][];//新建一个二维数组,有三个一维数组构成,但是每个一维数组没有开空间,指向的地址都是nullfor(int i = 0; i < arr.length; i++){arr[i] = new int[i + 1];//给每个一维数组单独开辟空间for(int j = 0; j < arr[i].length; j++){arr[i][j] = i + 1;System.out.print(arr[i][j] + " ");}System.out.println("");}}
}

静态初始化:

二维数组的应用

杨辉三角形

/*打印杨辉三角形
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
*/
//主要是三个规律把握住:
/*(1) 第i+1行有i个元素(2) 每行首末数字为1(3) yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];
*/
public class Lianxi{public static void main(String[] args){int[][] yanghui = new int[10][];for(int i = 0; i < yanghui.length; i++){yanghui[i] = new int[i + 1];yanghui[i][0] = 1;yanghui[i][yanghui[i].length - 1] = 1;for(int j = 1; j < yanghui[i].length - 1; j++){yanghui[i][j] = yanghui[i - 1][j] + yanghui[i - 1][j - 1];}}for(int i = 0; i < yanghui.length; i++){for(int j = 0; j < yanghui[i].length; j++){System.out.print(yanghui[i][j]+" ");}System.out.println("");}}
}

本章练习题

1

我的思路:

先定位,再插入,

定位:采用index来定,这个和老师想得一样,但是遍历结束a, index=-1 之后,更为简洁的是,让index = a.length 表示插入的位置在最后一个。

插入:我的想法只用了一个下标,所以代码看着挺复杂的,没有老师的简洁。

import java.util.Scanner;
public class Lianxi{public static void main(String[] args){int[] a = {10, 12, 45, 99};int[] b = new int[a.length + 1];Scanner myScanner = new Scanner(System.in);System.out.println("请输入您要添加的数字");int num = myScanner.nextInt();int index = -1;for(int i = 0; i < b.length; i++){if(a[i] >= num){index = i;break;}}for(int i = 0; i < b.length - 1; i++){if (index == -1){b[i] = a[i];b[b.length - 1] = num;}else if (i < index){b[i] = a[i];}else if(i == index){b[i] = num;b[i + 1] = a[i];}else if( i > index){b[i + 1] = a[i];}}for(int i = 0; i < b.length; i++){System.out.print(b[i] + " ");}}
}

下面附上老师的思路:

用i表示新数组下标,j表示原来的数组下标,赋值的时候跳过index这个地方

import java.util.Scanner;
public class Lianxi{public static void main(String[] args){int[] a = {10, 12, 45, 99};int[] b = new int[a.length + 1];Scanner myScanner = new Scanner(System.in);System.out.println("请输入您要添加的数字");int num = myScanner.nextInt();int index = -1;for(int i = 0; i < b.length; i++){if(a[i] >= num){index = i;break;}}if (index == -1){index = a.length;}for(int i = 0, j = 0; i < b.length; i++){if(index != i){b[i] = a[j];j++;}else{b[i] = num;}}for(int i = 0; i < b.length; i++){System.out.print(b[i] + " ");}}
}
import java.util.Scanner;
public class Lianxi{public static void main(String[] args){int[] a = new int[10];for (int i = 0; i < a.length; i++){a[i] = (int)(Math.random()*100) + 1;}double sum = 0;int max = a[0];int maxIndex = -1;for(int i = a.length - 1; i >= 0; i --){System.out.print(a[i] + "\t");sum += a[i];if(max <= a[i]){max = a[i];maxIndex = i;}if(a[i] == 8){System.out.println(a[i] + "= 8");}}System.out.println("最大值为" + max + ",下标为" + maxIndex);System.out.println("平均值为" + sum/a.length);}
}

冒泡排序:

import java.util.Scanner;
public class Lianxi{public static void main(String[] args){int[] a ={3, 6, 1, 5, 2, 10, 9};int temp = 0;for (int i = 0; i < a.length - 1 ; i++){for (int j = 0; j < a.length - i - 1; j++){if(a[j] >= a[j + 1]){temp = a[j];a[j] = a[j + 1];a[j + 1] = temp;}}}for(int i = 0; i < a.length; i++){System.out.print(a[i] + " ");}}
}

相关内容

热门资讯

重磅!2025陆家嘴论坛6月1... 《国际金融报》记者获悉,5月30日,上海市政府举行新闻发布会,上海市委金融办、中国人民银行办公厅、上...
零基础入门学习Python 0... 目录 1.函数的参数  2.函数文档 3.返回值  4. 局部变量全局变量 5.内嵌函数 6.闭包...
剧本中的灭世海啸即将到来?特朗... 欢迎来到:自说自话的总裁两周前,94岁的巴菲特在退休直播中说,美元,将「下地狱」,我们不会投资。这句...
sdbusplus:servi... 有的时候需要在service(记做s1)的method内访问其他serv...
EEPROM芯片(24c02)... 1、前言 (1)本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法,...
鼓励中长期资金指数化投资!上证... 文/王兆寰2025年5月30日下午,上海证券交易所与中证指数公司公布优化上证380指数编制方案,并发...
龙虎榜丨机构今日买入这15股,... 盘后数据显示,5月30日龙虎榜中,共33只个股出现了机构的身影,15只股票呈现机构净买入,18只股票...
年轻人的“茅台”新高不断!重仓... 今年以来,新消费概念股走势强劲。港股的泡泡玛特(国内潮玩行业龙头)今年来新高不断,截至2025年5月...
履新超130天,荣耀CEO李健... 5月下旬,一系列新品发布浪潮席卷而来。中端智能手机市场本就是国内各大厂商的战略要地,如今竞争再度白热...
岷山环能IPO:全员被批“学历... 近日,北交所官网显示,岷山环能高科股份公司(以下简称“岷山环能”)IPO提交注册。据悉,岷山环能20...
【TDengine】一篇文章带... 目录 1、通过docker方式安装 2、相关步骤解释 3、停止运行taos与卸载 1、通过doc...
华人健康并购狂飙:24倍溢价、... 本报(chinatimes.net.cn)记者于娜 见习记者 赵文娟 北京报道在医药零售行业整体放缓...
“国产版ChatGPT”文心一... 文章目录前言实验结果一、文学创作问题1 :《三体》的作者是哪里人?问题2:...
上海试点不动产信托登记,相关税... 继北京之后,上海也开始探索不动产信托财产登记确权新机制。中共上海市委金融委员会办公室、 国家金融监督...
德邦证券董事会改组后“换帅”,... 德邦证券 视觉中国 资料图德邦证券股份有限公司(下称“德邦证券”)步入国有实控阶段后,同步“换帅”...
连续盈利后,理想要靠纯电车赚钱... 增程市场进入红海后,覆盖新能源市场中更多品类,以及进入下沉市场是理想汽车下一步重心文|陈亮 蒋雨彤编...
字节短剧大地震:红果吞并抖音团... 2025年5月29日,抖音集团宣布成立“短剧版权中心”,整合旗下抖音短剧、红果短剧相关BD团队(商务...
算法基础课 算法基础课 第一章 基础算法(一) 1.快速排序——分治[O(n log...
通用航空ETF基金今日上市 低... 中证网讯 5月30日,华夏国证通用航空产业ETF(基金简称:通用航空ETF基金,基金代码:15923...
马斯克放豪言:特斯拉人形机器人... IT之家 5 月 30 日消息,SpaceX 和特斯拉的 CEO 埃隆・马斯克在今日的“Road t...
iOS_performSele... 看一下以下方法的执行结果: 例1:全局并发队列中执行异步任务 dispa...
来了!新型浮动费率基金| 一文... 首批新型浮动费率基金,本周开卖!这是公募改革方案发布后率先推出的创新产品,是将基金公司与投资者利益深...
刷题笔记之十三(有假币、最难的... 目录 1. 求正数数组的最小不可组成和 2. 有假币 3. 继承时先调用父类的构造方法;类中的成员变...
县城的万达广场,王健林才舍不得... 来源:源Sight记者:王言流动危机下,王健林似乎铁了心要将家底一卖到底。近日,国家市场监管总局披露...
三度递表终闻锣响 手回集团今日... 南方财经全媒体记者 林汉垚 北京报道三闯港交所终圆梦。5月30日,历经两次递表折戟后,小雨伞保险经纪...
后“531时代”来袭!隆基绿能... “物竞天择,适者生存。一款产品‘打天下’的时代已经终结,光伏市场已经进化到组件差异化的时代,分布式市...
英伟达吞下45亿美元“哑巴亏”... 出品 | 虎嗅科技组作者 | 丸都山编辑 | 苗正卿头图 | 视觉中国一份喜忧参半的财报,却罕见地让...
授之以渔篇-论文目录设置、双边... 文章目录细说风云自定义目录页眉、页码空白页删除缘起 细说风云 因为平日使用WPS比较习惯࿰...
基于jeecgboot的大屏设...      之前主要是讲了数据源的录入与数据库测试功能,但保存这块没有说,...
江丰电子,8年狂飙14倍,全国... 2017年6月,江丰电子登陆资本市场,发行价4.64元;截至2025年5月29日,按后复权计算,江丰...