Java基础--数组练习1(让你醍醐灌顶!!!)

简介: Java基础--数组练习1(让你醍醐灌顶!!!)

之前关于数组的知识点都已经讲的很通透了,还不清楚的小伙伴可以看一下我之前的文章,保证焕然一新的感觉。

这一篇,咱们由浅入深,来手把手做一做小练习,带大家更加深入的理解数组的应用。

话不多说,咱们开始吧!

案例一

01 需求

:car:创建一个数组,用来存储1~100之间的偶数。

02 分析

:cake:下面来剖析一下这个问题。

这是一个很简单的入门练习,主要也是为了巩固之前学的基础知识点。

入门小白快来学,一步一步教你怎么做,思路是什么样的,那么,走起~

(1)用什么存储

说到存东西,就很容易想到拿一个容器去存,就有了变量数组两个工具,变量呢只能存一个,而数组可以存一堆。

具体用变量还是数组来存,要看具体情况。

这里的需求,明确提出用数组来存储,那么就不用大费周章了。

(2)创建数组

既然用数组来存储,那么就需要创建一个数组啦。

创建数组,用来存储的是什么?是数字(偶数),int整数类型肯定够了。

所以我们先创建一个整数类型的数组,这里将数组取名为array

int[] array;
AI 代码解读

(3)给数组赋值(初始化)

创建好了数组,接下来要赋值(初始化)。

初始化方式有两种,静态初始化动态初始化

用什么初始化好呢?

别急,咱们来试一试。

①如果用静态初始化,那就是这样来写:

int[] array=new int[]{2,4,6,8......};
AI 代码解读

哎呀,用静态初始化,这花括号里面的数字,好像有好多哎。

这样也太麻烦了吧!不好。

②如果用动态初始化,那就是这样来写:

int[] array=new int[???];
AI 代码解读

这个中括号里面写啥呢?写的是数组的长度。

数组的长度是多少?本题说了,存储1~100之间的偶数,那么肯定是50个啦。

这就好确定了,数组长度为50

于是,就动态初始化好了一个数组:

int[] array=new int[50];
AI 代码解读

(4)如何往数组里存值

我们知道,动态初始化创建的数组,有长度,没有元素(都是默认值)

这个数组创建好了,50个小格子里边,都是默认值0,不是我们想要的。

我们想要的是1~100之间的偶数。

所以我们现在要将1~100之间的偶数存入数组内

怎么存呢?

①一般思路

按照一般思路,往数组里边存值,就可以一个一个存呀,就像这样:

array[0]=2;
array[1]=4;
array[2]=6;
...
...
AI 代码解读

这样写,比刚才的静态初始化还麻烦呢。

静态初始化是直接将所有数都用大括号括起来的,比这个还简单呢。

这种方法存,不好。

②进阶思路

那么就要想一想了,怎么快速又简单的将这些数字存储进数组。

观察发现,刚才我们一个一个地存进数组,都是重复一件事情啊。

重复一件事?

对啊,用循环呗!循环就是帮我们每次做一样的事情呀。

每次做一样的事情,而且事情还有规律,那必须用 循环呀!

什么规律?

看一下索引号,从0-49;偶数,从2-50。

(5)写循环结构

通过刚才的分析,我们可以通过循环,来帮助咱们完成存储这个繁琐的工作。

循环结构咋写呢?

这里咱们用for循环来演示,其他循环也是可以的啦。

for循环要执行多少次?

要存储1~100之间的偶数,自然是要执行50次啦。

==所以for循环要执行50次。==

②50次从何时开始数?

那,从什么时候数50次?都可以的。从1-50是50次,从100-150也是50次。只要是50次就好。

既然都可以,从什么时候开始数比较方便呢?

==从0开始数比较方便。==

为啥呢?因为从0开始数,刚好和索引号对的上。(看到这里有的小伙伴可能还是不明白,往下看)

索引号也是从0开始的,那我们这里从0开始数,刚好可以共用一个变量呀。

这样的话,循环里的变量不光可以计数(就是控制循环次数),还可以当索引号使用!

省去一个变量岂不乐哉。(省去一个索引号变量)

③写循环三要素

根据上面的分析,for循环的大致框架(三要素)就明白了。

下面来写吧:

for(int i=0;i<50;i++){
    
}
AI 代码解读

注意,三要素的第二个,循环条件可以写i<50,也可以写i<=49

都是50次,只不过一个有等于号一个没有。自己觉得哪个比较好写哪个,我这里觉得小于号比较清爽。

再注意一点,循环条件我们写的是i<50,这个50,可以用另一种方式表达。

怎么写呢?

数组长度是50,这里的控制条件就是i<50

那么就可以将控制条件的50用数组长度(array.length)表示

array.length中的.可以理解为中文里面的,即:数组的长度

具体写法如下,记着就好:

for(int i=0;i<array.length;i++){ //同样,控制条件还可以写i<=array.length-1 (加了等于号就要减一个)
    
}
AI 代码解读

④写循环体

循环体里面就是要写需要做的事情啦。

做啥事情?

往数组里面存值呀。

如何存值?之前在学数组的时候讲过基本操作,用索引号遍历,然后存值就好了。

array[?]=值;
AI 代码解读

中括号里边就是索引号,索引号的变化和咱们刚才的循环变量i变化一致。

那么这里就直接写i就好了。(现在是不是理解刚才让循环从0开始了,目的就是为了和索引号变化一致,省去一个变量)

后边的值写什么呢?

找一找后边的值和索引号之间的规律。(要学会找规律)

array[0]=2; -->  0*2+2=0
array[1]=4; -->  1*2+2=4
array[2]=6; -->  2*2+2=6
...
array[i]=?; -->  i*2+2=?
AI 代码解读

根据分析,结果显而易见。

后边的值用索引号(i)表示,就是2*i+2


好啦,整体分析下来,这个循环结构就写好了。

合在一块就是这样:

for(int i=0;i<array.length;i++){
    array[i]=2*i+2;
}
AI 代码解读

:rainbow: 如果一上来把这个代码给大家,很多入门的小伙伴都会稀里糊涂,不知道怎么来的。

刚开始学写代码,得弄明白具体的每一步,如何来的,这样遇到其他类似问题,就可以自己解决啦。

我们学的是思路,并不是这个题目怎么写,看起来是简单,但弄明白具体每一步,具体的思路,就是一件不容易的事情。

加油,一步一步来。

(6)输出结果

其实,截止到上面的代码。就已经根据题目意思,将1-100之间的偶数存进数组里了。

这里,为了验证一下,数组里面的数,究竟是不是我们想要存进去的,那可以输出一下数组里面的数。

这个步骤不是必须的,只是想验证一下。

以后可以直接用这个数组干其他事,不用验证。

这不是刚学,不放心,就验证一下结果啦,也可以看看,刚才的思路对不对,数组里面的值是不是想要存的。

这里就用到学数组的时候,咱们说的,数组元素的遍历

我们使用简单的加强for来遍历数组元素。

不知道的戳这里,在数组元素遍历第三点说过,具体位置:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r0LyLs6Q-1658634864993)(D:\Typora图片\image-20220724101436500.png)]

再回到这个题目,具体遍历代码,很简单:

for(int v:array){ //用变量v来接收数组内的元素,冒号后边是要遍历的数组
    System.out.println(v);
}
AI 代码解读

03 代码及执行

(1)代码

根据上面的分析,就可以得到这样的代码,整合一块并加上头尾:

public class Test1{
    public static void main(String[] args){
        //1.创建一个数组
        int[] array=new int[50];
        //2.将1-100之间的偶数存入数组内
        for(int i=0;i<array.length;i++){
            array[i]=2*i+2;
        }
        //3.输出验证看一看
        for(int v:array){
            System.out.println(v);
        }
    }
}
AI 代码解读

大家可以自己分析,然后写出来。

很简单的代码,重要的是思路,思路!!!

写的多了,思考的就很快,很快就可以写出来。刚开始不要着急。

(2)执行结果

这里我还是用dos窗口执行代码。

太长了,你们自己去执行一下,这里放部分结果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6n9h0jma-1658634864993)(D:\Typora图片\image-20220724104035942.png)]

04 总结

最后总结一下。

本题,用到的知识点。

(1)创建一个数组

我们这个题,用动态初始化创建了一个数组。

具体用什么初始化呢?

  • 如果元素个数比较少,用静态初始化
  • 如果元素个数很多而且有规律,用动态初始化,可以通过循环往数组里边放元素。
  • 如果元素个数很多又没有规律,用静态初始化,因为没办法循环往数组里边放入元素。
一般,使用 动态初始化较多,因为比较灵活,可以通过循环的方法来往数组里面放值。

(2)用了两个循环

一个只为存值,另一个只为了输出看一看。

一个循环50次,两个循环就是100次。

可以不可以用一个循环搞定呢?

能不能一边放一边输出呢?就像这样:

public class Test1{
    public static void main(String[] args){
        //1.创建一个数组
        int[] array=new int[50];
        //2.将1-100之间的偶数存入数组内
        for(int i=0;i<array.length;i++){
            array[i]=2*i+2;
            System.out.println(array[i]);
        }
    }
}
AI 代码解读

可以一边存一边输出。

但是,如果放的值是正确的,这样写可以。

但如果,存放值的时候操作失误。

目前输出的值是对的,下一次再看就不对了。(存放时直接看结果可能由于存放操作失误,看时正确,之后就发生变化)

况且,存放的值不一定要拿出来看一看。

存放是一件事情,查看是另一件。以后可以只存不放出来看。

不用担心多了50次循环,因为这个循环只是暂时我们查看逻辑对不对的,用来检验一下的,以后是可以不写的。

一个循环尽量做一件事更好。

我们不光写代码,还要看哪个更加合理。

案例二

01 需求

:car:创建一个数组,用来存储1~100之间的奇数。

02 分析

:cake:下面来剖析一下这个问题。

很简单,和第一个案例类似,这里就不过多阐述了。多说显得冗余。

(1)创建数组并初始化

明显,用动态初始化创建数组。

数组里边存放int整数类型,就创建int[]类型的数组。

给数组取个名字,叫array2

数组里面存放1-100之间奇数,有50个,那么数组长度就是50

具体写法:

int[] array2=new int[50];
AI 代码解读

(2)用循环存值

这里就不再具体分析为啥用循环啦。

因为是动态初始化创建的数组,咱们要往数组里面存值,就要找到规律,用循环存。

<1> 三要素

for循环三要素:

①我们将循环变量i从0开始数,为了与索引变化一致,省去一个变量。(不懂的看上一个案例,很详细)

②循环经历50次,也就是数50次,50是数组长度(array.length)。

③一次循环之后变量加一(i++)。

for(int i=0;i<array2.length;i++){
    
}
AI 代码解读

<2> 循环体

for循环体:

往数组内存值。(索引变化和循环变量变化一致,都用i表示即可)

array2[i]=?;
AI 代码解读

怎么存,找规律。

array2[0]=1; -->  0*2+1=0
array2[1]=3; -->  1*2+1=3
array2[2]=5; -->  2*2+1=5
...
array2[i]=?; -->  i*2+1=?
AI 代码解读

很明显了。

循环体就是这样:

array2[i]=i*2+1;
AI 代码解读

< 3> 整合

整体的for循环就是这样:

for(int i=0;i<array2.length;i++){
    array2[i]=i*2+1;
}
AI 代码解读

(3)输出

来看看逻辑对不对,输出数组中的值看一看。

for(int v2:array2){ //用变量v2来接收数组内的元素,冒号后边是要遍历的数组array2
    System.out.println(v2);
}
AI 代码解读

03 代码及执行

(1)代码

加上头尾,整体代码如下:

public class Test2{
    public static void main(String[] args){
        //1.创建一个数组
        int[] array2=new int[50];
        //2.将1-100之间的奇数存入数组内
        for(int i=0;i<array2.length;i++){
            array2[i]=i*2+1;
        }
        //3.输出验证看一看
        for(int v2:array2){ //用变量v2来接收数组内的元素,冒号后边是要遍历的数组array2
            System.out.println(v2);
        }
    }
}
AI 代码解读

(2)执行结果

这里放出部分结果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nlyZKhWo-1658634864994)(D:\Typora图片\image-20220724113716178.png)]

目录
打赏
0
0
0
0
14
分享
相关文章
Java 中数组Array和列表List的转换
本文介绍了数组与列表之间的相互转换方法,主要包括三部分:1)使用`Collections.addAll()`方法将数组转为列表,适用于引用类型,效率较高;2)通过`new ArrayList&lt;&gt;()`构造器结合`Arrays.asList()`实现类似功能;3)利用JDK8的`Stream`流式计算,支持基本数据类型数组的转换。此外,还详细讲解了列表转数组的方法,如借助`Stream`实现不同类型数组间的转换,并附带代码示例与执行结果,帮助读者深入理解两种数据结构的互转技巧。
Java 中数组Array和列表List的转换
|
1月前
|
《从头开始学java,一天一个知识点》之:数组入门:一维数组的定义与遍历
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问&quot;`a==b`和`equals()`的区别&quot;,大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列就是为你打造的Java「速效救心丸」!我们承诺:每天1分钟,地铁通勤、午休间隙即可完成学习;直击痛点,只讲高频考点和实际开发中的「坑位」;拒绝臃肿,没有冗长概念堆砌,每篇都有可运行的代码标本。明日预告:《多维数组与常见操作》。 通过实例讲解数组的核心认知、趣味场景应用、企业级开发规范及优化技巧,帮助你快速掌握Java数组的精髓。
67 23
Java快速入门之数组、方法
### Java快速入门之数组与方法简介 #### 一、数组 数组是一种容器,用于存储同种数据类型的多个值。定义数组时需指定数据类型,如`int[]`只能存储整数。数组的初始化分为静态和动态两种: - **静态初始化**:直接指定元素,系统自动计算长度,如`int[] arr = {1, 2, 3};` - **动态初始化**:手动指定长度,系统给定默认值,如`int[] arr = new int[3];` 数组访问通过索引完成,索引从0开始,最大索引为`数组.length - 1`。遍历数组常用`for`循环。常见操作包括求和、找最值、统计特定条件元素等。
Java 中数组的多种定义方式
本文深入解析了Java中数组的多种定义方式,涵盖基础的`new`关键字创建、直接初始化、动态初始化,到多维数组、`Arrays.fill()`方法以及集合类转换为数组等高级用法。通过理论与实践结合的方式,探讨了每种定义方法的适用场景、优缺点及其背后的原理,帮助开发者掌握高效、灵活的数组操作技巧,从而编写更优质的Java代码。
38 0
Java 复制数组
本文介绍了Java中数组的基础知识与常用操作,包括数组的概念、创建、访问元素、遍历、复制、排序和搜索等方法。同时详细讲解了数组的五种赋值方式,并通过代码示例演示了求总和平均值、最大最小值、升序降序排序及Arrays类的常用方法。内容深入浅出,适合初学者学习掌握Java数组的核心功能与应用场景。
Java基础(六):数组
Java基础(六):数组
47 10
Java基础(六):数组
Java数组:静态初始化与动态初始化详解
本文介绍了Java中数组的定义、特点及初始化方式。
196 12
Java 数组
【10月更文挑战第19天】Java 数组是一种非常实用的数据结构,它为我们提供了一种简单而有效的方式来存储和管理数据。通过合理地使用数组,我们能够提高程序的运行效率和代码的可读性。更加深入地了解和掌握 Java 数组的特性和应用,为我们的编程之旅增添更多的精彩。
63 4
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
79 2
|
6月前
|
Java“(array) <X> Not Initialized” (数组未初始化)错误解决
在Java中,遇到“(array) &lt;X&gt; Not Initialized”(数组未初始化)错误时,表示数组变量已被声明但尚未初始化。解决方法是在使用数组之前,通过指定数组的大小和类型来初始化数组,例如:`int[] arr = new int[5];` 或 `String[] strArr = new String[10];`。
177 2

热门文章

最新文章