char里面的每一个字符,都有一个对应的数值(每个字符都可以转换成一个整数,这个整数范围是0-65535)
今天目标:
- 掌握变量
- 掌握运算符
变量:计算机用来存储可变数据的内存空间
创建变量的过程:
- 确定变量的类型和名字(声明变量)
- 给变量赋值(变量的初始化)
public static void main(String[] args){
byte b1;//声明变量
b1=122;//变量初始化
System.out.println("第一次赋值:"+b1);//输出b1变量
b1=126;//再次赋值
System.out.println("第二次赋值:"+b1);//输出b1变量
}
创建变量时可以将两步写在一起的
格式:数据类型 变量名=变量值;
int i1=185;
不建议多个变量在一起声明
如下
int b1,b2,b3,b4;
变量的命名规则(法律):
- 以字母、下划线或$开始
- 以字母、数字、下划线、$进行创建变量名
变量的命名规范(道德):
- 驼峰命名法:第一个单词以小写字母开始,从第二个单词开始以后的每个单词的首字母都采用大写字母,如startGame
- 见名知意:看见变量名,就知道表示的含义, startGame (开始游戏)
使用变量名之前必须经过声明并初始化
int b1,b2,b3,b4;
System.out.print(b1);//报错,没有进行初始化
b5=10;//报错,没有声明变量类型
System.out.print(b5);
使用变量时需要注意的问题
- 重复定义变量名
- 定义的变量初始化后越界了(赋值的数值不能超过数据类型的范围)
- 使用long的数据类型赋值时后面加个L或l。(编译器默认的整数类型是int类型,如果超出int表示的范围就会出错)
- 使用float的数据类型赋值时后面加个F或f。(编译器默认为double(双精度)类型)
int a1;
int a1=128;//重复定义
byte b1=128;//越界了,byte最大可表示为127
long lon=125856954L;
double d1=0.1;//不报错
float f1=0.1f;
键盘扫描器:Scanner
作用:可以接受键盘输入的内容,传输到程序中
键盘扫描器的使用步骤:
- 导包 import java.util.Scanner;
- 创建键盘扫描器:Scanner key=new Scanner(System.in);
- 提示用户输入内容
- 接受用户输入的内容 数据类型 变量名=key.next数据类型();
- 使用完后关闭键盘扫描器 key.close()
报错出现:java.util.InputMismatchException,说明输入的类型与接受的类型不匹配从而导致报错
package day02;
import java.util.Scanner;//导入的包
public class ClassDemo {
public static void main(String[] args) {
Scanner key=new Scanner(System.in);//创建键盘扫描器
System.out.println("请输入一个整数:");//提示输入的数据类型
int num=key.nextInt();//接受用户输入的内容
System.out.println("你输入的整数是:"+num);//打印输出用户输出的内容
clos.key();//关闭键盘扫描器
}
}
小案例:键盘输入两个整数,输出两数之和
public static void main(String[] args) {
Scanner key=new Scanner(System.in);
System.out.println("请输入第一个整数:");
int i1=key.nextInt();
System.out.println("请输入第二个整数:");
int i2=key.nextInt();
int sum=i1+i2;
System.out.println(i1+"+"+i2+"="+sum);
key.close();
}
算术运算符:+ - * / %(取余)
注意:
- 当使用“/”时,如果左右两边都是整数,就做相除取整运算
public static void main(String[] args) {
Scanner key=new Scanner(System.in);
System.out.println("请输入第一个整数:");
int i1=key.nextInt();
System.out.println("请输入第二个整数:");
int i2=key.nextInt();
double sum=i1/i2;
System.out.println(i1+"/"+i2+"="+sum);
key.close();
}
- 如果左右两边有任何一边是小数,就做正常的除法运算
public static void main(String[] args) {
Scanner key=new Scanner(System.in);
System.out.println("请输入第一个整数:");
int i1=key.nextInt();
System.out.println("请输入第二个整数:");
double i2=key.nextDouble();//类型变为了double
double sum=i1/i2;
System.out.println(i1+"/"+i2+"="+sum);
key.close();
}
小面试题:
下面是否可以编译通过
short s=1;
short s1=s+s;
System.out.println(s1);
对于byte ,short,char而言,当发生运算时,运算的结果会被隐式转换成int类型
java中的类型转换:
- 自动转换(隐式类型转换):当小范围的数据向大范围的数据类型时,会发生自动类型转换。例如:byte–>int(自动转换)
byte s1=10;
int s2=s1;//byte的s1自动转换为int类型
- 强制类型转换(显示类型转换):当大范围的数据向小范围的数据类型时,需要强制类型转换。例如:int–>byte(强制转换)慎用 每个数据类型的范围不同
int s1=10;
byte s2=(byte)s1;//int的s1强制转换为byte类型
上面的小面试需要怎么改才可以编译通过
s+s后结果的数据类型变为了int类型
- 强制转换为byte类型数据
- 自动转换更改s1的数据类型
public static void main(String[] args) {
short s=1;
short s1=(short) (s+s);//强制转换为byte
//s+s的结果发生自动转换为了int类型
//int s1=s+s;
System.out.println(s1);
}
强制转换慎用
public static void main(String[] args){
int s2=130;
byte s1=(byte)s2;
System.out.println(s1);
}
课后小作业
- 输入一个天数,计算天数包括多少周和剩余多少天数
public static void main(String[] args){
Scanner key=new Scanner(System.in);
System.out.println("请输入你要计算的天数:");
int day=key.nextInt();
int aweek=day/7;
int day1=day%7;
System.out.println(day+"天有"+aweek+"周"+day1+"天");
key.close();
}
- 输入圆的半径,计算圆的面积
public static void main(String[] args) {
Scanner key=new Scanner(System.in);
System.out.println("请输入要计算圆面积的半径:");
double r=key.nextDouble();
double area=r*r*3.14;
System.out.println("半径为"+r+"圆面积为:"+area);
key.close();
}
- 输入四位数的卡号,输出四位数上每位数的和,比如 输入:1234 输出:10
public static void main(String[] args) {
Scanner key=new Scanner(System.in);
System.out.println("请输入一个四位数:");
int number=key.nextInt();
int a=number/1000;
int b=number/100%10;
int c=number%100/10;
int d=number%10;
int sum=a+b+c+d;
System.out.println("该四位数和为:"+sum);
key.close();
}