Java的基础结构
语法:
- 原始数据类型
- 语句 :声明,赋值,条件,循环,调用和返回
- 数组 :数组是多个同种类型值的集合
- 静态方法 :静态方法可以封装和重用代码,使我们可以用独立的模块开发程序
- 字符串 :字符串是一连串的字符,Java内置了对他们的操作
- 标准输入输出 :标准输入输出是程序与外界交流的桥梁
- 数据抽象 : 数据抽象封装和重用代码,使得我们可以定义非原始数据类型,进而支持面向对象编程
二分查找法为例
package 基础.基础编程模型;
//导入Java库
import java.util.Arrays;
import java.util.Scanner;
/**
* 二分查找
*/
public class BinarySearch {
/**
* 静态方法
* @param k 参数变量
* @param a 参数变量
* @return 返回值为int类型
*/
public static int rank(int k, int []a){
//初始化声明语句
int lo = 0;
int hi = a.length-1;
//循环语句
while (lo <= hi){
//表达式
int mid =lo + (hi-lo)/2;
if (a[mid] > k) hi = mid-1;
else if(a[mid] < k) lo = mid+1;
else return mid;
}
//返回语句
return -1;
}
/**
* 系统调用main
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int []whitelist = {1,2,4,7,8,9,10,12};
//c从小到达排序
Arrays.sort(whitelist);
//结束输入条件
while(!in.hasNext("EOF")){
int k = in.nextInt();
//System.out.println(k);
//条件语句,调用本地方法
if (rank(k,whitelist) == -1){
System.out.println(k);
}
}
}
}
原始数据类型和表达式
- 数据类型就是一组数据和对其所能进行的操作的集合。
表达式
算符优先级:
- 运算符*和运算符/(以及%)的优先级高于±(优先级越高越早计算)
- 在逻辑运算符中,!拥有最高优先级,之后是&&,接着是||
其他原始数据类型
- 64位整数,及其算术运算符(long)
- 16位整数,及其算术运算符(short)
- 16位字符,及其算术运算符(char)
- 8位整数,及其算术运算符(byte)
- 32位单精度实数,及其算术运算符(float)
语句
- 声明语句:创建某种类型的变量并用标识符为其命名
- 赋值语句:将某种类型的数值赋予一个变量,Java还有一些隐式赋值语法比如整型加一
- 条件语句:能够简单的改变流程-根据条件执行两个代码段之一
- 循环语句:更加彻底的改变流程-只要条件为真就不断执行代码段中的语句
- 调用和返回语句:和静态方法有关,是改变执行流程和组织的另一种方式
简单记法
声明并初始化
声明语句和赋值语句结合起来:int i = 1;
隐式赋值
- 递增递减运算符:++1,–1,1–,1++
- 其他符合运算符:i+=i
单语句片段
如果条件或者循环语句的代码只有一行,那么代码段的花括号是可以省略的
for语句
基本结构
for(<initialize>; <boolean expression>; <increment>){
<block statement>
}
总结
数组
创建并初始化数组
创建并初始化数组需要三步:
- 声明数组中的名字和类型
- 创建数组:指定数组的长度
- 初始化数组元素
以下是创建并初始化数组的三种方式
- 完整模式
double [] a;
a = new double[N];
for(int i = 0; i < N; i ++){
a[i] = 0.0;
}
- 简化写法
double[] a = new double[N];
- 声明初始化
int [] a = {1,1,2,3,5,8};
简化写法
- 数值类型数组的变量默认初始值是0.0
- 布尔型默认初始值是false
使用数组
其别名
请注意数组名表示的是整个数组—如果我们将一个数组变量赋予另一个变量,那么两个变量将会指向同一个数组。例如
int [] a = new int[N]
a[i] = 12345
int []b = a;
b[i] = 5678; //此时a[i]也会变成5678
这种情况叫做其别名。如果想要复制一个数组。请声明创建并初始化一个新的数组,然后将原数组复制到新的数组
二维数组
二维数组就是一维数组的数组
double [][] a =new double[M][N];
静态方法
方法需要一个参数计算出某种数据类型的返回值(例如数学函数的结果)或者产生某种副作用(例如打印一个值)
静态方法的性质
- 方法的参数按照值传递
- 方法名可以重载
- 方法只能返回一个值
- 方法可以产生副作用
递归
- 递归:方法可以调用自己
编写递归代码最重要的有一下三点
- 递归总有一个最简单的情况----方法的第一条语句总是包含一个return条件语句
- 递归总是去尝试解决一个规模更小的子问题,这样递归才能收敛到简单情况
- 递归调用的父问题和子问题之间不应该有交集
二分查找的递归实现
/**
* 二分查找法的递归实现
* @param k
* @param a
* @param lo
* @param hi
* @return
*/
public static int rank(int k, int []a, int lo, int hi){
//如果key存在在a【】中,他的索引不会小于lo且不会大于hi;
if (lo > hi) return -1;
int mid = lo + (hi - lo)/2;
if (a[mid] > k) return rank(k,a,lo,mid-1);
else if (a[mid] < k) return rank(k,a,mid+1,hi);
else return mid;
}
单元测试-main()方法测试
API
字符串
字符串的拼接
运算符(+)
类型转换
字符串的两个主要用途是:
- 将用户从键盘输入的内容转化为相应数据类型的值
- 以及将各数据类型的值转化为能够在屏幕上显示的内容
自动转换
任意类型参数+字符串