第3章 Java的基本程序设计结构

1、一个简单的Java应用程序

/**
 * @author AlanLiang
 */
public class FirstExample {
	public static void main(String[] args) {
		//打印语句
        System.out.println("Hello World");
    }
}
  • 访问修饰符:public、private、protected、default
  • 类名命名规则:每个单词首字母大写(骆驼命名法)
  • java虚拟机是从指定类main方法的代码开始执行
  • 三种注释区别
类内部本包子类外部类
public
protected
default
private

2、数据类型

java是一种强类型语言,必须每个变量声明一种类型。8种基本数据类型分别为 byte、short、int、long、float、double、char、boolean

类型存储空间取值范围
byte1字节-128 ~ 127
short2字节
int4字节-2^31 ~ 2^31-1
long8字节
float4字节有效位数6~7位
double8字节有效位数15位
char1字节
boolean1字节

整型:

  • Java7开始,加上前缀0b或0B即可表示二进制,如0b1001是9
  • 0~255是否可以存在一个byte中?P31

浮点型:

  • 正无穷大 // 正整数/0
  • 负无穷大
  • NaN(非数字)// 0/0或负数平方根
  • 金融计算使用BigDecimal
if(x == Double.NaN) //false,所有“非数值”的都认为不相同
if(Double.isNaN(x)) //检查 x 是否一个非数值

3、变量和常量

变量:

  • 变量的声明规则:区分大小写、不使用保留字
  • 声明变量后,必须用赋值语句对其进行显示初始化
 注:Java10后,对局部变量,若可从初始值推断类型,则可直接使用var关键字而无需指定类型
 var age = 12; //int
 var name = "alan"; //String

常量:

  • 使用final关键字进行修饰
  • 常量名大写
  • 类常量:可在一个类多个方法使用,static final修饰

public class FirstExample {
	static final double MONEY = 100.00;
	public static void main(String[] args) {
		//打印语句
        final double CM_PER_INCH = 2.54;
    }
}

枚举:

enum Size { SMALL, MEDIUM, LARGE, EXTRA_LARGE};
Size s = Size.SMALL;

4、运算符

  • 算数运算符:+ - * /
  • 函数:Math.sqrt、Math.pow
  • 赋值运算:+=、-=
  • 自增:++i 和 i++的区别?
  • 关系运算符:==、!=、&&、||(短路运算?)
  • 三元运算符: condition ? expression1 : expression2
  • 位运算符: &、|、^、~ 、>> 、<< 、 >>>(用0补高位,无<<<)
  • 优先级表在P44

类型转换:
1、自动转换:
数值转换
2、强制转换:

double x = 9.97;
int y = (int)x; //9
int z = (int)(Math.round(x)); //10,四舍五入

5、字符串

String:引用类型

  • 如何判断两个字符串是否相等?equals和==的区别?
  • 空串""和null的区别?
  • 如何遍历字符串?码点?
  • String的API?P50

6、输入与输出

1、输入:

Scanner in = new Scanner(System.in);
in.next();//空格分割,读取一个单词
in.nextInt();
in.nextLine();//读取一行
in.hasNext();//检查是否还有别的单词

2、输出

System.out.println();//换行
System.out.print();
//打印x:包括8个字符,精度为小数点后两位,会打印: 3333.33
System.out.printf("%8.2f",x);

System.out.printf();

  • 每个以%开始的格式说明符都已对应参数替换,f是float,s是String,d是十进制整数
  • 详情标志转换符可看P58

7、控制流程

1、块即{ }:不能再嵌套的两个块中声明同名的变量
2、条件语句:if else
3、循环语句

  • while ( conditions ) statement
  • do { statement } while ( conditions ) :至少执行一次
  • for ( int i = 1; i < 10; i++ ) { }
  • switch:注意switch穿透
//choice可为char、byte、short、int、String(java 7)
switch ( choice ){
	case 1:
		...
		break;
	case 2:
		...
	defalut:
		...
		break;
}

4、循环中break和continue的区别?

7、大数

BigInteger和BigDecimal

  • 大数不能使用算数运算符,需使用方法进行运算:P78
  • BigDecimal为何可以进行精密运算

8、数组

1、声明数组:

int[] a = new int[10];
int[] b = {1,2,3};
//声明长度为0的数组
int[] a = new int[0];
int[] b = new int[] {};

2、遍历数组

  • for循环
  • for each循环
  • Arrays.toString()

3、数组的使用

  • 拷贝数组:Arrays.copyOf
  • 数组排序:Arrays.sort
import java.util.Arrays;
import java.util.Scanner;

/**
 * @author AlanLiang
 * @date 2021/7/28
 * 抽球游戏:在x个数字中抽取y个,要保证各不相同
 */
public class BallsArrayTest {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("球的总数有多少个?");
        int x = in.nextInt();
        System.out.println("需要抽取多少个球?");
        int y = in.nextInt();

        //定义球数组并初始化赋值0~48
        int[] balls = new int[x];
        for (int i = 0; i < balls.length; i++) {
            balls[i] = i ;
        }

        //定义结果数组
        int[] result = new int[y];
        for (int i = 0; i < result.length; i++) {
            //随机抽取,注:Math.random()取值为[0,1)
            int random = (int) (Math.random() * 49);
            //将随机生成的数字作为下标,取数
            result[i] = balls[random];
            //取出后,将balls数组最后一个数赋值给当前的random下标值,数组长度-1(去重)
            balls[random] = balls[x -1];
            x--;
        }
        //排序
        Arrays.sort(result);
        //打印
        for (int i : result) {
            System.out.println(i);
        }
    }
}

4、多维数组
案例:用二维数组实现
在这里插入图片描述

/**
 * @author AlanLiang
 * @date 2021/7/28
 */
public class CompoundInterest {
    public static void main(String[] args) {

        final double START_RATE = 10;
        final int X_RATES = 6;
        final int Y_YEARS = 10;

        //创建利率数组并赋值
        double[] interests = new double[6];
        for (int i = 0; i < interests.length; i++) {
            interests[i] = (START_RATE + i)/100.0;
        }

        //创建收益二维数组
        double[][] balances = new double[Y_YEARS][X_RATES];
        //首行赋值
        for (int j = 0; j < balances[0].length; j++) {
            balances[0][j] = 10000.00;
        }
        //其他行赋值
        for (int i = 1; i < balances.length; i++) {
            for (int j = 0; j < balances[i].length; j++) {
                //先获取上一年,即上行的值
                double oldBalance = balances[i - 1][j];
                balances[i][j] = oldBalance + oldBalance * interests[j];
            }
        }
        //打印利率
        for (int i = 0; i < interests.length; i++) {
            System.out.printf("%9.0f%%",interests[i] * 100);
        }
        System.out.println();
        //打印收益
        for (double[] balance : balances) {
            for (double v : balance) {
                System.out.printf("%10.2f",v);
            }
            System.out.println();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值