算法基础之基础编程模型
一、Java程序的基本结构
1、原始数据类型:它们在计算机程序中精确地定义整数、浮点数和布尔值等。它们的定义包括取值范围和能够对相应的值进行的操作,它们能够被组合为类似于数学公式定义的表达式。
2、语句:语句通过创建变量并为其赋值、控制运行流程或者引发副作用来进行计算。我们会使用六种语句:声明、赋值、条件、循环、调用、返回。
3、数组:数组是多个同种数据类型的值的集合。
4、静态方法:静态方法可以封装并重用代码,使我们可以用独立的模块开发程序。
5、字符串:字符串是一连串的字符,Java内置了对它们的一些操作。
6、标准输入/输出:标准输入输出是程序与外界联系的桥梁。
7、数据抽象:数据抽象封装和重用代码,使我们可以定义非原始数据类型,进而支持面向对象编程。
二、原始数据类型与表达式
(一)、Java的原始数据类型
1、整型,及其算数运算符(int)
2、浮点型,及其算术运算符(double)
3、布尔型,它的值{true、false}及其逻辑操作(boolean)
4、字符型,它的值是用户可以输入的英文仔么数组字符和符合(char)
类型 | 值域 | 运算符 | 典型表达式 | 值 |
---|---|---|---|---|
int | -231——231之间的整数(32位) | +(加) -(减) *(乘) /(除) %(求余) | 5+3 5-3 5*3 5/3 5%3 | 8 2 15 1 2 |
double | 双精度实数(64位) | +(加) -(减) *(乘) /(除) | 3.141-0.03 2.0-2.0e-7 100*0.015 6.02e23 / 2.0 | 3.111 1.9999998 非1.5 3.01e23 |
boolean | true/false | &&(与) ||(或) !(非) ^(异或) | true && false false || true !false true^true | false true true false |
char | 字符(16位) | (算术运算符很少使用) |
(二)、表达式
Java使用的是中缀表示式:一个字面量(或一个表达式),紧接着是一个运算符,再接着另一个字面量(或者另一个表达式)。
当一个表达式包含一个以上的运算符时,运算符的作用顺序非常重要,因此Java约定了如下的运算符优先级。
优先级 | 运算符 | 结合性 |
---|---|---|
1 | ()、[]、{} | 从左向右 |
2 | !、+、-、~、++、– | 从右向左 |
3 | *、/、% | 从左向右 |
4 | +、- | 从左向右 |
5 | «、»、>>> | 从左向右 |
6 | <、<=、>、>=、instanceof | 从左向右 |
7 | ==、!= | 从左向右 |
8 | & | 从左向右 |
9 | ^ | 从左向右 |
10 | | | 从左向右 |
11 | && | 从左向右 |
12 | || | 从左向右 |
13 | ?: | 从右向左 |
14 | =、+=、-=、*=、/=、&=、|=、^=、~=、«=、»=、>>>= | 从右向左 |
(三)、类型转换
如果不会损失信息,数值会被自动提升为高级的数据类型。
转换指的是在表达式中把类型名,放在括号里将其后的值转换为括号中的类型。
将浮点型转换为整型将会截断小数部分而非四舍五入,因此最好是在表达式中只使用同一类型的字面量和变量
三、语句
Java程序是由语句组成的。语句能够通过创建和操作变量、对变量赋值并控制这些操作的执行流程来描述运算。语句通常会被组织成代码段,即花括号中的一系列语句。
- 声明语句: 创建某种类型的变量并用标识符为其命名。
- 赋值语句:将(由表达式产生的)某种类型的数值赋予一个变量。Java还有一些隐式赋值的语法可以使某个变量的值相对于当前值发生变化。
- 条件语句:能够简单地改变执行流程——根据指定的条件执行两个代码段之一。
- 循环语句:更彻底地改变执行流程——只要条件为真就不断反复执行代码段中的语句。
- 调用和返回语句:和静态方法有关,是改变执行流程和代码组织的另一种方式。
程序就是由一系列声明、赋值、条件、循环、调用和返回语句组成的,一般来说代码的结构都是嵌套的:一个条件语句或循环语句的代码段中也能包含条件语句或是循环语句。
四、数组
(一)、数组的概念
数组能够顺序存储相同类型的多个数据,除了存储数据,我们也希望能够访问数据。访问数组中的某个元素的方法是将其编号然后索引。如果我们由N个值,它们的编号则为0——N-1。这样对于0——N-1之间任意的i,我们就能够在Java代码中使用a[i]唯一地表示第i个元素的值。
(二)、数组的典型代码示例
计算数组中的最大值
public double get(double[] array) {
double max = array[0];
for (int i = 1; i < array.length; i++) {
if (array[i] > max) {
max = array[i];
}
}
return max;
}
计算数组元素的平均值
public double get(double[] array) {
int N = array.length;
double sum = 0;
for (int i = 0; i < N; i++) {
sum += array[i];
}
return sum / N;
}
复制数组:
public double[] get(double[] array) {
int n = array.length;
double[] result = new double[n];
for (int i = 0; i < n; i++) {
result[i] = array[i];
}
return result;
}
颠覆数组元素的顺序
public double[] get(double[] array) {
int n = array.length;
for (int i = 0; i < n / 2; i++) {
double temp = array[i];
array[i] = array[n - i - 1];
array[n - i - 1] = temp;
}
return array;
}
矩阵相乘:
public double[][] get(double[][] array1, double[][] array2) {
int n = array1.length;
int m = array1[0].length;
double[][] array3 = new double[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
for (int k = 0; k < n; k++) {
array3[i][j] += array1[i][k] * array2[k][j];
}
}
}
return array3;
}
五、静态方法
在许多语言中,静态方法被称为函数,因为它们和数学函数的性质类似。静态方法是一组在被调用时会被顺序执行的语句。修饰符“static”
将这类方法和实例方法区别开来。
方法封装了由一系列语句所描述的运算。方法需要参数(某种数据类型的值)并根据参数计算出某种数据类型的返回值(例如数学函数的结果)或者产生某种副作用(例如打印一个值)。
每个静态方法都是由签名(关键字pubilc static以及函数的返回值,方法名以及一串各种类型的参数)和函数体(即包含在花括号中的代码)组成的。
六、字符串
(一)、字符串的概念
字符串是由一串字符(char类型的值)组成的。一个String类型的字面量包括一对双引号和其中的字符。比如“Hello World”。String类型是Java的一个数据类型,但并不是元素数据类型。
(二)、字符串的类型转换
String值和数字之间相互转换的API |
---|
public class Integer |
static int parseInt(String s) 将字符串s转换为整数 static String toString(int i) 将整数i转换为字符串 |
public class Double |
static double parseDouble(String s) 将字符串s转换为浮点数 static String toString(doule x) 将浮点数x转换为字符串 |