Skip to content

Commit a8fbaea

Browse files
committed
First Draft
1 parent 35d6aae commit a8fbaea

File tree

6 files changed

+632
-18
lines changed

6 files changed

+632
-18
lines changed

Chapter1/Chapter1.md

Lines changed: 194 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,166 @@
11
<notice>教程读者请不要直接阅读本文件,因为诸多功能在此无法正常使用,请移步至[程谱 coderecipe.cn](https://coderecipe.cn/learn/1)学习完整教程。如果您喜欢我们的教程,请在右上角给我们一个“Star”,谢谢您的支持!</notice>
2-
初入编程
2+
Java教程-
33
======
44

55
欢迎来到程谱社区!😁 我们是一群留学生,致力于搭建一个系统而又不枯燥的零基础入门编程学习平台。希望大家能多多支持我们,如果发现我们的不足之处也欢迎联系我们~
66

7-
这是大多数程谱学员的第一个教程,从这里开始学习吧!💖
7+
这是程谱Java数组与数组列表教程的第1章,主要为大家讲解数组(Array)。请大家进行学习!
88

9-
输入&输出
9+
数组的定义和数组值的存取
1010
------
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+
12161

13-
你可能没有注意到,但仔细想想就会发现,我们身边的电子设备大多都可以由我们操控(输入)和告诉我们信息(输出),不只是电脑手机和平板,例如电话☎️能接收和发出声音。思考到这一步,你就已经理解了输入(input)和输出(output)这两个概念了。
14162

15-
之前说的是广义的输入和输出,而对于计算机程序的运行来说,我们先给程序提供必要的数据信息(输入),然后程序进行一系列的运算,再把结果告诉我们(输出),就像下面这张图画的这样:
16-
![输入输出](Pic1.png)
17163

18-
掌握了吗?如果掌握了,就按一下右下方这个按钮吧~
19164

20165
练习环境小热身
21166
------
@@ -59,17 +204,48 @@
59204

60205
小练习
61206
------
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.
66244

67-
试试做出如下的效果:
245+
(D) Aninfiniteloopwilloccur.
68246

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.
74248

249+
下面的内容要按一下才会显示:
250+
<cr type="hidden"><notice>隐藏内容功能在此无法正常显示,请移步至[程谱 coderecipe.cn](https://coderecipe.cn/learn/1)查看。</notice>E</cr>
75251
学到这里,你就已经算是入门计算机编程啦👏,加油加油继续学习吧~

Chapter2/Chapter2.md

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
<notice>教程读者请不要直接阅读本文件,因为诸多功能在此无法正常使用,请移步至[程谱 coderecipe.cn](https://coderecipe.cn/learn/1)学习完整教程。如果您喜欢我们的教程,请在右上角给我们一个“Star”,谢谢您的支持!</notice>
2+
Java教程-
3+
======
4+
5+
欢迎来到程谱社区!😁 我们是一群留学生,致力于搭建一个系统而又不枯燥的零基础入门编程学习平台。希望大家能多多支持我们,如果发现我们的不足之处也欢迎联系我们~
6+
7+
这是程谱Java教程数组与数组列表单元的的第2章,主要为大家讲解数组列表(ArrayList)。请大家进行学习!
8+
9+
数组列表的定义
10+
----
11+
数组列表(ArrayList)也是一种储存一组数据的方式,与Array不同,ArrayList有以下优点:
12+
13+
1.ArrayList长度可变,而Array长度固定。
14+
15+
2.在ArrayList中最后一个存储位置一定是list.size()-1,在Array中数据可能是部分填满的,因此程序员使用Array时必需持续跟踪最后一个使用的储存位置。
16+
17+
3.在ArrayList中,你可以通过一条语句插入或删除元素,元素会自动移动,然而在Array中插入或删除元素会需要你用代码移动剩下的元素。
18+
19+
集合API
20+
-----
21+
ArrayList类是一种集合API(Application Programming Interface),是一个Java提供的库,大部分API都在java.util里。
22+
23+
集合与泛型
24+
-----
25+
Java的集合类主要负责保存、盛装和管理对象,因此集合类也被称为容器类。
26+
27+
集合类分为Set、List、Map和Queue四大体系。所有集合类都位于java.util包中,集合中只能保存对象的引用。集合类把它所含有的元素看成是Object的实例,这样方便但是也有隐患,即多个类型不同的元素被放入一个集合中,会增加集合访问时类型转换的困难,甚至会产生错误。
28+
29+
泛型的引入改善了这种情况,使用泛型来限制集合里元素的类型,并让集合记住元素的类型。这样可以允许编译器检查加入集合的元素类型,避免值类型不一致的错误。典型的泛型集合有List<T>, HashMap<K,V>等。
30+
31+
包类
32+
-----
33+
为了更好地组织类(Class),Java 提供了包机制,用于区别类名的命名空间。它把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。
34+
35+
包语句的语法格式为:
36+
```java
37+
package pkg1[.pkg2[.pkg3…]];
38+
```
39+
大家看定义可能会有些晕头转向的。那么,我们来通过一个实例来说明一下包的实际作用。例如,我们假设一个Hello.java文件内容如下:
40+
```java
41+
package net.java.util;
42+
public class Hello{
43+
...
44+
}
45+
```
46+
那么它的路径应该是 net/java/util/Hello.java 这样保存的。 Package(包) 的作用是把不同的 Java 程序分类保存,更方便的被其他 Java 程序调用。
47+
明白了什么事包以后,我们就来学习一下如何创建和使用包。创建包的代码如下:
48+
49+
e.g.
50+
```java
51+
/* 文件名: Vehicle.java */
52+
package vehicles;
53+
54+
interface Vehicle {
55+
public void price();
56+
public void fuel();
57+
...
58+
}
59+
```
60+
TIPS: 我们通常使用小写的字母来命名包,这是为了避免与类、接口名字的冲突。本例在vehicles包中加入一个接口(interface),而该接口的实现在此略而不表。
61+
62+
在我们需要使用包时,需要使用大名鼎鼎的import关键字。在 Java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:
63+
64+
```java
65+
import package1[.package2…].(classname|*);
66+
```
67+
68+
自动封包拆包
69+
-----
70+
封包与拆包,听起来高大上而不知所云,其实就是java会自动把基本类型(如int, double等)封装成对象。
71+
72+
能够这么做的原因,是因为所有的基本类型都有一个与之对应的类,称为 Warpper,如 int对应Integer、char对应Character、void对应Void 和 boolean对应Boolean 等。
73+
74+
正常来讲,我们如果要将Integer与int相互转换时,需要调用intValue和valueOf这两个方法。但是在JDK 1.5之后,Java会隐式地自动调用他们。我们要做的只是键入如下代码:
75+
76+
e.g.
77+
```java
78+
//声明一个Integer对象
79+
Integer num = 10;
80+
//以上声明就是使用了自动封包,可以解析为
81+
Integer num = new Integer(10);
82+
```
83+
但是需要注意的是,自动打包规范要求 boolean、byte、char类型数据 <=127、int和short数据介于 -128~127 之间的包装到固定的对象中,所以会出现这种情况,请大家一定注意:
84+
```java
85+
Integer a = 100;
86+
Integer b = 100;
87+
if (a == b) // 成立
88+
//但是
89+
Integer a = 1000;
90+
Integer b = 1000;
91+
if (a == b) // 不成立
92+
```
93+
小练习
94+
-----
95+
1.Consider writing a program that reads the lines of any text file into a sequential list of lines. Which of the following is a good reason to implement the list with an ArrayList of String objects rather than an array of String objects?
96+
97+
(A) The get and set methods of ArrayList are more convenient than the [] notation for arrays.
98+
99+
(B) The size method of ArrayList provides instant access to the length of the list.
100+
101+
(C) An ArrayList can contain objects of any type, which leads to greater generality.
102+
103+
(D) If any particular text file is unexpectedly long,the ArrayList will automatically be resized. The array, by contrast, may go out of bounds.
104+
105+
(E) The String methods are easier to use with an ArrayList than with an array.
106+
107+
2.Here is a method that locates the Student with the highest idNum:
108+
```java
109+
/**Precondition: ArraystuArrofStudentisinitialized. * @return Student with highest idNum
110+
*/
111+
public static Student locate(Student[] stuArr) {
112+
/* method body */
113+
}
114+
```
115+
Which of the following could replace method body so that the method works as intended?
116+
117+
I
118+
```java
119+
int
120+
for (Student student : stuArr)
121+
max = stuArr[0].getIdNum();
122+
if (student.getIdNum() > max) {
123+
max = student.getIdNum();
124+
return student;
125+
}
126+
return stuArr[0];
127+
```
128+
II
129+
```java
130+
Student highestSoFar = stuArr[0];
131+
int max = stuArr[0].getIdNum();
132+
for (Student student : stuArr)
133+
if(student.getIdNum() > max) {
134+
max = student.getIdNum();
135+
highestSoFar = student;
136+
}
137+
return highestSoFar;
138+
```
139+
III
140+
```java
141+
int maxPos = 0;
142+
for(int i = 1; i < stuArr.length; i++)
143+
if(stuArr[i].getIdNum() > stuArr[maxPos].getIdNum()) maxPos = i;
144+
return stuArr[maxPos];
145+
```
146+
(A) I only
147+
148+
(B) II only
149+
150+
(C) III only
151+
152+
(D) I and III only
153+
154+
(E) II and III only

0 commit comments

Comments
 (0)