|
1 | 1 | <notice>教程读者请不要直接阅读本文件,因为诸多功能在此无法正常使用,请移步至[程谱 coderecipe.cn](https://coderecipe.cn/learn/1)学习完整教程。如果您喜欢我们的教程,请在右上角给我们一个“Star”,谢谢您的支持!</notice> |
2 | | -初入编程 |
| 2 | +Java教程- |
3 | 3 | ====== |
4 | 4 |
|
5 | 5 | 欢迎来到程谱社区!😁 我们是一群留学生,致力于搭建一个系统而又不枯燥的零基础入门编程学习平台。希望大家能多多支持我们,如果发现我们的不足之处也欢迎联系我们~ |
6 | 6 |
|
7 | | -这是大多数程谱学员的第一个教程,从这里开始学习吧!💖 |
| 7 | +这是程谱Java数组与数组列表教程的第1章,主要为大家讲解数组(Array)。请大家进行学习! |
8 | 8 |
|
9 | | -输入&输出 |
| 9 | +数组的定义和数组值的存取 |
10 | 10 | ------ |
11 | | -如果你是在用电脑阅读这个教程,那么你就正在盯着电脑的显示屏看,偶尔还会滚动一下鼠标滚轮🖱。如果你用的是手机或者平板📱,那么就会通过触摸屏上下滑动网页来阅读教程的内容。 |
| 11 | +我们今天来讲一个Java语言中全新的对象:数组(Array)。 |
| 12 | + |
| 13 | +数组就是一个对象,将相同类型的一列类型数据放在这一个对象之中。大家不要被“数组”这个名字蒙蔽,这些数据不一定得是数字,而可以是任何类型的数据。比如说,我们可以把bus,trunk,car等数据全部放进一个叫做vehicle的数组中。 |
| 14 | + |
| 15 | +接下来,我们来看一看在Java语言中,如何定义一个数组: |
| 16 | + |
| 17 | +e.g. |
| 18 | +```java |
| 19 | +double[] data; |
| 20 | +``` |
| 21 | + |
| 22 | +或 |
| 23 | + |
| 24 | +```java |
| 25 | +double data[]; |
| 26 | +``` |
| 27 | +这两行代码的意义是一样的,意味着我们定义了一个名字叫做data的数组,这个数组的类型为double型(也就是说存储在其中的数据都是double型的)。 |
| 28 | + |
| 29 | +在定义了数组之后,我们可以对其初始化,比如说,定义它的长度是15。定义数组长度的代码如下: |
| 30 | + |
| 31 | +e.g. |
| 32 | +```java |
| 33 | +data = new double[15]; |
| 34 | +``` |
| 35 | +当然了,我们也可以在定义数组的同时就赋予它初始化的长度: |
| 36 | +```java |
| 37 | +double[] data = new double[15]; |
| 38 | +``` |
| 39 | +除了在初始化数组时定义它的长度,我们甚至可以在定义和初始化的时候直接往数组里面填数值: |
| 40 | + |
| 41 | +e.g. |
| 42 | +```java |
| 43 | +int[] data = {1,2,3}; |
| 44 | +``` |
| 45 | +如果在初始化时直接往数组里填入了数值,那么这个时候数组的长度就会被自动识别(例如上例中,数组data的长度就已经默认为3),就不需要再写。这种初始化方法叫initializer list。 |
| 46 | + |
| 47 | +要是想访问数组内的某个元素(想得知在数组内某个位置的数值),可以使用以下代码(index是从0~数组内元素的数量-1的整数): |
| 48 | +```java |
| 49 | +Element1 = arrayName[index]; |
| 50 | +``` |
| 51 | +如果想要写入或更改数组的某个元素也可以使用同理的方法: |
| 52 | +```java |
| 53 | +arrayName[index] = Element1; |
| 54 | +``` |
| 55 | +需要注意的是,index超出范围会出现异常,抛出ArrayIndexOutOfBoundsException。 |
| 56 | + |
| 57 | +数组的长度 |
| 58 | +------ |
| 59 | +数组的长度是固定的,想要获取数组长度,可以使用以下代码: |
| 60 | +```java |
| 61 | +arrayName.length |
| 62 | +``` |
| 63 | +TIPS:数组的长度不用(),字符串的长度要加() |
| 64 | + |
| 65 | +e.g. |
| 66 | +```java |
| 67 | +//String |
| 68 | +String str = “CodeRecipe”; |
| 69 | +System.out.println(str.length()); |
| 70 | +//Array |
| 71 | +int[] arr = {1,2,3,4,5}; |
| 72 | +System.out.println(arr.length); |
| 73 | +``` |
| 74 | +说了那么多关于数组的知识和如何使用它的方法,我们来看一个实例来了解它的真正用处吧: |
| 75 | + |
| 76 | +e.g. |
| 77 | +```java |
| 78 | +int array[] = {1,2,3}; |
| 79 | + for(int i = 0;i < 3;i ++) |
| 80 | + System.out.println("Hello "+array[i]); |
| 81 | +``` |
| 82 | +以上代码运行后输出: |
| 83 | +```java |
| 84 | +Hello 1 |
| 85 | +Hello 2 |
| 86 | +Hello 3 |
| 87 | +``` |
| 88 | +为了让大家理解的更清楚一些,我们在这里再举几个更加实际的例子来说明数组究竟有多大的用处。 |
| 89 | + |
| 90 | +e.g. |
| 91 | + |
| 92 | +比如说,根据大家在要表示10个学生的身高,我们可以这么做: |
| 93 | +```java |
| 94 | +double student1Weight = xxx; |
| 95 | +double student2Weight = xxx; |
| 96 | +… |
| 97 | +double student10Weight = xxx; |
| 98 | +``` |
| 99 | +然而,如果有100个学生这个代码就要长到100行了。 |
| 100 | +使用数组就可以极大地减轻我们的工作量。我们只需要以下一行代码: |
| 101 | +```java |
| 102 | +double studentWeight[] = {xxx,xxx,….,xxx}; |
| 103 | +``` |
| 104 | +当然,如果你认为数组完全可以用多个变量代替,那么你就会发现下面的事情不用数组很难做到: |
| 105 | +```java |
| 106 | +double studentWeight[] = {xxx,xxx,….,xxx}; |
| 107 | +for(int i = 0; i < 100;i++){ |
| 108 | +System.out.println(stndentWeight[i]); |
| 109 | +} |
| 110 | +``` |
| 111 | +数组的长度 |
| 112 | +------ |
| 113 | +通过我们之前学过的循环方法,我们可以遍历整个数组中的元素: |
| 114 | + |
| 115 | +1.for循环遍历 |
| 116 | + |
| 117 | +e.g. |
| 118 | +``` |
| 119 | +for(int i = 0;i<array.length;i++){ |
| 120 | +//对array[i]操作 |
| 121 | +} |
| 122 | +``` |
| 123 | +2.for-each循环遍历 |
| 124 | + |
| 125 | +e.g. |
| 126 | +``` |
| 127 | +int array[] = {1,2,3}; |
| 128 | + for( int i : array){ |
| 129 | + System.out.println(i); |
| 130 | + } |
| 131 | +``` |
| 132 | +这样就会把数组中的内容都输出出来。 |
| 133 | + |
| 134 | +TIPS:在for-each循环中不能增加或者减少数组的内容,不然可能会导致循环出现问题。 |
| 135 | +作为参数传递数组 |
| 136 | +---- |
| 137 | +Array被当做一种对象Object,他在被传递的时候传递的是Reference而不是值(具体后面会提到),所以Java不会把Array复制一份。传入后修改array的内容会导致原array变量读取出的是修改后的内容。比如下面这个例子: |
| 138 | + |
| 139 | +e.g. |
| 140 | +``` |
| 141 | +//我们这里有一个函数 |
| 142 | +public static void changeArray(int[] b){ |
| 143 | +for(int i = 0;i < b.length;i++) |
| 144 | +b[i]+=3; |
| 145 | +} |
| 146 | +//在主函数里 |
| 147 | +int[] array = {1,2,3,4}; |
| 148 | +changeArray(array); |
| 149 | +System.out.print(“The changed array is”); |
| 150 | +for(int n:list) System.out.print(n+” ”); |
| 151 | +//System.out.print也是输出用的函数,只是不换行 |
| 152 | +``` |
| 153 | +结果会输出 |
| 154 | +``` |
| 155 | +The change array is 4,5,6,7 |
| 156 | +``` |
| 157 | +小练习 |
| 158 | +------ |
| 159 | + |
| 160 | + |
12 | 161 |
|
13 | | -你可能没有注意到,但仔细想想就会发现,我们身边的电子设备大多都可以由我们操控(输入)和告诉我们信息(输出),不只是电脑手机和平板,例如电话☎️能接收和发出声音。思考到这一步,你就已经理解了输入(input)和输出(output)这两个概念了。 |
14 | 162 |
|
15 | | -之前说的是广义的输入和输出,而对于计算机程序的运行来说,我们先给程序提供必要的数据信息(输入),然后程序进行一系列的运算,再把结果告诉我们(输出),就像下面这张图画的这样: |
16 | | - |
17 | 163 |
|
18 | | -掌握了吗?如果掌握了,就按一下右下方这个按钮吧~ |
19 | 164 |
|
20 | 165 | 练习环境小热身 |
21 | 166 | ------ |
|
59 | 204 |
|
60 | 205 | 小练习 |
61 | 206 | ------ |
62 | | -让我们来练习一下我们刚学习的知识吧。 |
63 | | -<lab lang="blocks" parameters="logic=false&loops=false&lists=false&color=false&variables=false&functions=false&text=false&name=chapter1lab3"> |
64 | | - <notice>练习环境在此无法显示,请移步至[程谱 coderecipe.cn](https://coderecipe.cn/learn/1)查看。</notice> |
65 | | -</lab> |
| 207 | +1.Which of the following correctly initializes an array arr to contain four elements each with value 0? |
| 208 | + |
| 209 | +I int[] arr = {0, 0, 0, 0}; |
| 210 | + |
| 211 | +II int[] arr = new int[4]; |
| 212 | + |
| 213 | +III int[] arr = new int[4]; |
| 214 | + |
| 215 | + for (int i = 0; i < arr.length; i++) |
| 216 | +arr[i] = 0; |
| 217 | + |
| 218 | +(A) Ionly |
| 219 | + |
| 220 | +(B) IIIonly |
| 221 | + |
| 222 | +(C) IandIIIonly |
| 223 | + |
| 224 | +(D) IIandIIIonly |
| 225 | + |
| 226 | +(E) I,II,andIII |
| 227 | + |
| 228 | +下面的内容要按一下才会显示: |
| 229 | +<cr type="hidden"><notice>隐藏内容功能在此无法正常显示,请移步至[程谱 coderecipe.cn](https://coderecipe.cn/learn/1)查看。</notice>E</cr> |
| 230 | + |
| 231 | +2.Refer to the following codes egment. You may assume that arr is an array of int values. |
| 232 | +```java |
| 233 | +int sum = arr[0], i = 0; while (i < arr.length) { |
| 234 | +i++; |
| 235 | +sum += arr[i]; } |
| 236 | +``` |
| 237 | +Which of the following will be the result of executing the segment? |
| 238 | + |
| 239 | +(A) Sumofarr[0],arr[1],...,arr[arr.length-1]willbestoredinsum. |
| 240 | + |
| 241 | +(B) Sumofarr[1],arr[2],...,arr[arr.length-1]willbestoredinsum. |
| 242 | + |
| 243 | +(C) Sumofarr[0],arr[1],...,arr[arr.length]willbestoredinsum. |
66 | 244 |
|
67 | | -试试做出如下的效果: |
| 245 | +(D) Aninfiniteloopwilloccur. |
68 | 246 |
|
69 | | -1. 输出“我要认真学习编程” (不带引号) |
70 | | -2. 计算1000-985并输出 |
71 | | -3. 计算(100-58)\*2并输出 |
72 | | -4. 把输入的数值加上10输出 |
73 | | -5. 把输入的数值平方(也就是四则运算加乘方块里面的^2)输出 |
| 247 | +(E) A run-time error will occur. |
74 | 248 |
|
| 249 | +下面的内容要按一下才会显示: |
| 250 | +<cr type="hidden"><notice>隐藏内容功能在此无法正常显示,请移步至[程谱 coderecipe.cn](https://coderecipe.cn/learn/1)查看。</notice>E</cr> |
75 | 251 | 学到这里,你就已经算是入门计算机编程啦👏,加油加油继续学习吧~ |
0 commit comments