变量与运算符
1.变量的使用
int age;
double weight;
char gender;
boolean marry;
String name;
2.变量赋值
age=18;
weight=109;
gender='女';
boolean isBeauty=true;
3.整数类型
byte short int long
4.浮点类型:float、double
float精确到7位有效数字,精度低
double精度是float两倍。
定义 float 类型的变量,赋值时需要以" f "或" F "作为后缀。
Java 的浮点型 常量默认为 double 型 。
5.字符类型
形式 1:使用单引号(' ')括起来的 单个字符 。
例如:char c1 = 'a'; char c2 = '中'; char c3 = '9';
– 形式 2:直接使用 Unicode 值 来表示字符型常量:‘ \uXXXX ’。其中,
XXXX 代表一个十六进制整数。
例如:\u0023 表示 '#'。
– 形式 3:Java 中还允许使用 转义字符 ‘\’ 来将其后的字符转变为特殊字符
型常量。
例如:char c3 = '\n'; // '\n'表示换行符
6.布尔类型
boolean 类型数据只有两个值:true、false,无其它
– 不可以使用 0 或非 0 的整数替代 false 和 true,这点和 C 语言不同
Less is More!建议不要这样写:if ( isFlag = = true ),只有新手才如
此。关键也很容易写错成 if(isFlag = true),这样就变成赋值 isFlag 为
true 而不是判断! 老鸟的写法 是 if (isFlag)或者 if ( !isFlag)。
7.自动类型提升
int i = 'A';//char 自动升级为 int ,其实就是把字符的编码值赋值给 i 变量了
double d = 10;//int 自动升级为 double
long num = 1234567; // 右边的整数常量值如果在 int 范围呢,编译和运行都可以通过,这里涉及到数据类型转换
8.强制类型转换
将 3.14 赋值到 int 类型变量会发生什么?产生编译失败,肯定无法赋值
(1)当把存储范围大的值(常量值、变量的值、表达式计算的结果值)强制转
换为存储范围小的变量时,可能会 损失精度 或 溢出 。
int i = (int)3.14;// 损失精度
double d = 1.2;
int num = (int)d;// 损失精度
int i = 200;
byte b = (byte)i;// 溢出
(2)当某个值想要提升数据类型时,也可以使用强制类型转换。这种情况的强
制类型转换是 没有风险 的,通常省略。
int i = 1;
int j = 2;
double bigger = (double)(i/j);
(3)声明 long 类型变量时,可以出现省略后缀的情况。float 则不同。
long l1 = 123L;
long l2 = 123;// 如何理解呢? 此时可以看做是 int 类型的 123 自动类型提升为 long 类型
//long l3 = 123123123123; // 报错,因为 123123123123 超出了 int 的范围。
long l4 = 123123123123L;
//float f1 = 12.3; // 报错,因为 12.3 看做是 double ,不能自动转换为 float
类型
float f2 = 12.3F;
float f3 = (float)12.3;
9.String
任意八种基本数据类型的数据与String类型只能进行+运算,且结果一定也是String
String不能进行强制类型转换
System.out.println("" + 1 + 2);//12
int num = 10;
boolean b1 = true;
String s1 = "abc";
String s2 = s1 + num + b1;
System.out.println(s2);//abc10true
//String s3 = num + b1 + s1;// 编译不通过,因为 int 类型不能与 boolean 运算
String s4 = num + (b1 + s1);// 编译通过
String str = "123";
int num = (int)str;// 错误的
int num = Integer.parseInt(str);// 正确的,后面才能讲到,借助包装类的方法才能转
10.计算机二进制、八进制、十六进制十进制转化
学过好多遍了,不看了
11.运算符
赋值运算符
比较运算符
逻辑运算符
位运算符
12.条件运算符
int i=(1==2?110:120);
流程与控制语句
由于,之前学过加上java的控制语句和其他语言也类似,以敲代学吧
1.顺序结构
没啥,正常写
2.分支结构
if else
public static void main(String[] args) {
int score=79;
if(score==100) {
System.out.println("奖励!");
}else if(score >=60 && score< 100) {
System.out.println("不错,及格了");
}else {
System.out.println("胖揍一顿");
}
}
switch case
public static void main(String[] args) {
int score=79;
switch(score/10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("不及格 ");
default:
System.out.println("及格了");
}
}
case具有穿透性,也就是说,如果case后面不写break,将出现穿透现象,也就是一旦 匹配成功,不再判断下一个case的值,直接向后运行,直到遇到break或者switch结束停止 。
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入 2023 年的 month:");
int month = scan.nextInt();
System.out.println("请输入 2023 年的 day:");
int day = scan.nextInt();
int sumDays = 0;// 记录总天数
// 写法 2 :推荐
switch(month){
case 12:
sumDays += 30;// 这个 30 是代表 11 月份的满月天数
case 11:
sumDays += 31;// 这个 31 是代表 10 月份的满月天数
case 10:
sumDays += 30;// 这个 30 是代表 9 月份的满月天数
case 9:
sumDays += 31;// 这个 31 是代表 8 月份的满月天数
case 8:
sumDays += 31;// 这个 31 是代表 7 月份的满月天数
case 7:
sumDays += 30;// 这个 30 是代表 6 月份的满月天数
case 6:
sumDays += 31;// 这个 31 是代表 5 月份的满月天数
case 5:
sumDays += 30;// 这个 30 是代表 4 月份的满月天数
case 4:
sumDays += 31;// 这个 31 是代表 3 月份的满月天数
case 3:
sumDays += 28;// 这个 28 是代表 2 月份的满月天数
case 2:
sumDays += 31;// 这个 31 是代表 1 月份的满月天数
case 1:
sumDays += day;// 这个 day 是代表当月的第几天
}
System.out.println(month + "月" + day + "日是 2023 年的第" + sumDays + "天");
// 关闭资源
scan.close();
}
Scanner类
import java.until.Scanner
循环结构
for
public static void main(String[] args) {
int sum=0;
for(int i=1;i<100;i++) {
if(i%2==1) {
sum+=i;
}
}
System.out.println(sum);
}
while
就那样
do-while
和while相比 ,它至少执行一次,在最后面判断
break continue
区别就是,break跳出循环结构,continue跳出本次循环,执行下次循环 。
Scanner
键盘输入代码的四个步骤:
1. 导包: import java.util.Scanner;
2. 创建 Scanner 类型的对象: Scanner scan = new
Scanner(System.in);
3. 调用 Scanner 类的相关方法( next() / nextXxx() ),来获取指定类型
的变量
4. 释放资源: scan.close();
import java.util.Scanner
Scanner scanner=new Scanner(System.in);
int age=scanner.nextInt();
获取一个随机数
如何产生一个指定范围的随机整数?
1、Math 类的 random()的调用,会返回一个[0,1)范围的一个 double 型值
2、Math.random() * 100 ---> [0,100) (int)(Math.random() * 100) ---> [0,99]
(int)(Math.random() * 100) + 5 ----> [5,104]
3、如何获取 [a,b] 范围内的随机整数呢? (int)(Math.random() * (b - a +1))+a
(b-a+1)是区间长度 最后加a是开头是a
double value=Math.random();
System.out.println(value);
int number =(int)(Math.random()*10)+7;
System.out.println(number);