Java 3.数组

一、数组的定义

1
2
3
4
5
6
7
8
9
//以下是一维数组命名准则
数据类型[] 数组名 = new 数据类型[数组长度];
//以下是一维数组实例
int[] intArray = new int[100];

//以下是二维数组的命名准则
数据类型[][] 数组名 = new 数据类型[二维数组i长度][二维数组j长度];
//以下是二维数组实例
int[][] twoDimArray = new int[10][10];

二、数组的访问

与C++基本相同,均可通过下标访问,如 intArray[10].
若直接访问intArray则为访问intArray[0],其以一个指针的形式存在

三、数组的常用API

1.不需要调用包:
1) .length 返回数组长度
注意!!!与字符串的返回长度API区别,此API不需要括号!

1
2
int[] intArray = new int[100];
System.out.println(intArray.length); //注意,length后不需要括号

2.需要调用 java.util.Arrays
1)Arrays.sort() 将数组排序

2)Arrays.fill(int[] array, int val)将值填充至数组

3)Arrays.toString()将数组转化为字符串

4)Arrays.deepToString()将多维数组转化为字符串

需要注意的是,所有数组一旦定义后便不可变长

Java 2.循环

一、for循环

基本语法与C++并无二致,但注意增强for循环的写法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//以下为基本语法
for(元素类型 变量名: 数组或集合)
{
//执行语块
}

//以下为实例(数组)
int[] numberList = {1, 2, 3,};
for(int num: numberList)
{
System.out.println(num); //将会依次输出每个数字
}

//以下为实例(容器、集合)
List<String> fruits = new LinkedList<>();
fruits.add("apple");
fruits.add("banana");
fruits.add("watermelon");
for(String fruit: fruits)
{
System.out.println(fruit); //将会依次输出每样水果
}

二、while循环与do while循环

基本与C++用法相同

Java 1.输入、输出和变量

一、输出

方法1:

1
2
3
4
5
System.out.println();  //输出并换行,适用于各种输出

System.out.println("Hello World"); //输出字符串
System.out.println(a); //输出变量a
System.out.println("Hello" + a) //输出字符串“Hello”和变量a

方法2:

1
2
3
4
5
6
System.out.printf();	//格式化输出,使用方法同C语言

System.out.printf("%d", a); //输出整型a
System.out.printf("%s", str); //输出字符串str
System.out.printf("%f", flo); //输出float类型 flo
System.out.printf("%f", doub); //输出duoble类型 doub

注意!!! 在C和C++中格式化输出float类型变量使用的是”%f”,double类型以及long double类型的变量,使用的是”%lf”。而在Java中,输出float类型和double类型的变量,使用的均为”%f”.

方法3(输出效率更高,适用于大规模输出):

首先调用包java.io.BufferedWriter, java.io.OutputStramWriter
而后需要新建一个BufferedWriter类型的对象.

1
2
3
4
5
6
7
8
9
10
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;

public class Main {
public static void main(String[] args) {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); //新建对象bw
bw.write("Hello World"); //BufferedWriter类的一个方法write()
bw.flush(); //需要手动刷新缓冲区
}
}

二、输入

方法1:
调用 java.util.Scanner
随后新建一个对象用于调用Scanner内的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //新建对象sc

String str = sc.next(); //读入下一个字符串(遇到空格为止)
String line = sc.nextLine(); //读入一整行的字符(到换行符为止,空格也读入)
int a = sc.nextInt(); //读入下一个整型
float b = sc.nextFloat(); //读入下一个单精度浮点数
double c = sc.nextDouble(); //读入下一个双精度浮点数
}
}

方法2(适用于大规模输入,效率高,但注意要抛异常):

1
2
3
4
5
6
7
8
9
10
11
//调包
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
public static void main(String[] args) throws Exceptions { //注意抛异常! throws Exceptions
BufferedReader bw = new BufferedReader(new InputStreamReader(System.in)); //新建一个对象bw

String str = bw.readLine(); //读入一整行的字符
}
}

三、变量

与C++基本相同,但需要注意以下几点:

1.常量的定义:
常量使用 final 定义.

1
final int a = 5;

2.类型转换:

1)普通转换(不改变数值):

1
2
char c = 'a';
int a = (int)c //将变量c从char类型转换为int类型(其值不变)

2)字符串转换 :

使用特定函数,将字符串所表示的数值转换.

1
2
String str = "123.45";
double a = Double.parseDouble(str); //此时,a的值会是123.45

相似的函数还有

1
2
Integer.parseInt();		//是parseInt!!!
Float.parseFloat();

数据结构与算法(一)

                                注:以下代码均基于C++

快排算法

思路: 取数组q[]的中间值为参考, 将数组的首尾两端与数组的中间值比较(首端比中间值小, 尾端比中间值大)直至首尾两端均不符合条件.此时再将不符合条件的两个值交换.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void quickSort(int q[], int l, int r)
{
if(l >= r) return; //递归算法的终止条件

int x = q[l + r >> 1], i = l - 1, j = r + 1; //取x作为比较的中间值

while(i < j)
{
do i++;
while(q[i] < x);

do j--;
while(q[j] > x);

// 如果还满足i < j且q[i] < q[j],交换q[i]与q[j]
if(i < j)
{
int t = q[i];
q[i] = q[j];
q[j] = t;
}
}

quickSort(q, l, j), quickSort(q, j + 1, r); //递归算法
}

归并排序算法

思路: 将数组q[]从中间分成长度相等的两段, 设其长度中间值为mid. 依次比较q[1]与q[mid + 1]等的大小, 不断将两者其中更小者放入临时数组temp[]中, 直至两段中的一段全部被放入. 此时再将未放完的一段数组全部放入临时数组temp[]中.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void mergeSort(int q[], int l, int r)
{
if(l >= r) return; //归并算法终止条件

int mid = l + r >> 1, i = l, j = mid + 1, t = 0; //定义数组中间位数等
int temp[100010]; //定义临时数组用来保存部分数据

mergeSort(q, l, mid), mergeSort(q, mid + 1, r); //归并算法

while(i <= mid && j <= r) //
{
if(q[i] <= q[j]) temp[t++] = q[i++];
else temp[t++] = q[j++];
}
while(i <= mid) temp[t++] = q[i++];
while(j <= r) temp[t++] = q[j++];

for(i = l, t = 0;i <= r;i++, t++) q[i] = temp[t]; //将临时数组中的元素放回到数组q[]中
}

更新中…

我是如何搭建自己的博客的?

写下第一篇这篇正值暑假,作者在家闲来无事翻看手机时,想起前一段时间北邮所谓的喜茶姐事件。在看完男主的博客后,不禁感叹男主的口才伶俐,同时也懂得借助博客来扩大事件的关注度。

为了记录学习过程,同时以备不时之需作者决定借助hexo和GitHub搭建一个博客。


一、准备工作

1.下载并安装Node.js

2.下载并安装Git

3.确保你拥有一个Github账号

二、安装hexo

1.创建一个文件夹用来存放本地的博客内容

文件夹

2.在创建好的文件夹目录下右键呼出Git bash控制台


更新中…