1.1基础编程模型-算法4

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

在这里插入图片描述

字符串

字符串的拼接

运算符(+)
在这里插入图片描述

类型转换

字符串的两个主要用途是:

  • 将用户从键盘输入的内容转化为相应数据类型的值
  • 以及将各数据类型的值转化为能够在屏幕上显示的内容
    在这里插入图片描述

自动转换

任意类型参数+字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值