基本数据类型运算规则(5条)
计算结果的数据类型,与最大类型一致
System.out.println( 3.14 * 5); // 计算结果为double型
System.out.println( 3 / 2); // 1 int/int 计算结果为 int 型
System.out.println( 3.0 / 2); // 1.5
System.out.println( 3D / 2); // 1.5
byte、short、char 三种比 int 小的整数,运算时会自动转换成 int
byte a = 2;
byte b = 3;
//byte c = a + b;// error Type mismatch: cannot convert from int to byte
byte c = (byte)(a + b);// 5
byte d = (byte)(2 + b);//5
整数运算溢出
//System.out.println(30289289 * 60 * 60 * 24 * 365); error 计算结果不正确
//计算的整数已经远远的超过int范围,可以转为long类型
System.out.println(30289289L * 60 * 60 * 24 * 365);
浮点数运算不精确
double a = 2.34;
System.out.println( 2 - a ); // -0.33999999999999986
System.out.println( 1 - 0.9);// 0.09999999999999998 后续章节介绍解决方法
浮点数的特殊值
// java中允许分母为 零 ,但前提是需小数运算
System.out.println( 3 / 0); // error
System.out.println( 3.14 / 0); // Infinity 表示正无穷大
System.out.println( 0 / 0.0); // NaN 表示Not a Number
运算符
注: && 和 || 具有短路作用,当 && 运算符左侧条件为 false 时,&& 运算符右侧不执行,形成短路。当 || 运算符左侧条件为 true 时, || 运算符右侧不执行。
自增自减运算符
遵循一条原则:前置++ 先加 1 后使用,后置++ 先使用后 加 1. 自减运算符同理。
int a = 1;
System.out.println(a++); // 1 先打印 a 的值再完成 a + 1
//此时 a 的值变为 2
int b = 1;
System.out.println(++b); // 2 b 的值先加 1 后打印
System.out.println(++a+b+a++);// 8 3 + 2 + 3 = 8
int c = 0;
System.out.println(c--); // 0
//此时 c 的值变为 -1
int d = 0;
System.out.println(--d); // -1
System.out.println(--c-d-c--);// 1 -2-(-1)-(-2) = 1
三元运算符(求三个数的最大值)
import java.util.Scanner;
public class Max{
public static void main(String[] args){
int a = new Scanner(System.in).nextInt();
int b = new Scanner(System.in).nextInt();
int c = new Scanner(System.in).nextInt();
//求 a 和 b 两个数的最大值
int max = a > b ? a : b;
//求 a b c 三个数的最大值
int result = max > c ? max : c;
int result2 = (a > b ? a : b) > c ? (a > b ? a : b) : c;
int result3 = a > b ? ( a > c ? a : c) : (b > c ? b : c);
}
}
判断年份是否为闰年
输入年号,判断是否是闰年。两个条件:
1、能被4整除,并且不能被100整除
2、或者能被400整除
import java.util.Scanner;
public class Year{
public static void main(String[] args){
int year = new Scanner(System.in).nextInt();
String desc = "平年";
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
desc = "闰年";
}
System.out.println(year + "年是" + desc);
}
}
分支结构 1 if
单分支:
if ( 判断条件是否成立){
条件成立后,执行此代码
}
注:{ }内 只有一条语句时,可省略{ } 不写
import java.util.Scanner;
public class Data{
public static void main(String[] args){
int data = new Scanner(System.in).nextInt();
if( data % 2 == 0){
System.out.println(data + "是偶数");
}
}
}
多分支:
if( 判断条件是否成立){
满足条件的代码
}else{
不满足条件的代码
}
import java.util.Scanner;
public class Data{
public static void main(String[] args){
int data = new Scanner(System.in).nextInt();
if( data % 2 == 0){
System.out.println(data + "是偶数");
}else{
System.out.println(data + "是奇数");
}
}
}
嵌套分支:
if(判断条件1){
满足条件的代码1
}else if(判断条件2){
满足条件的代码2
}else if(判断条件3){
满足条件的代码3
}else if(判断条件4){
满足条件的代码4
}else{
谁都不满足的代码5...
}
练习 1 :商品打折
接收用户输入的原价。满1000打9折。满2000打8折。满5000打5折。
import java.util.Scanner;
public class price{
public static void main(String[] args){
double price = new Scanner(System.in).nextDouble();
// 这里用三元运算符计算,不过不建议这样做
//double discount = price >= 5000 ? price * 0.5 : ( price >= 2000 ? price * 0.8 : ( price >= 1000 ? price * 0.9 : price));
double discount = price; // discount变量记录打折后的价格
if( price >= 5000){
discount = price * 0.5;
}else if( price >= 2000){
discount = price * 0.8;
}else if( price >= 1000){
discount = price * 0.9;
}
}
}
练习2:统计学员得分
90分以上 优秀 80-89 良好 70-79 中等 60~69 及格 60分以下 不及格
import java.util.Scanner;
public class Score{
public static void main(String[] args){
int score = new Scanner(System.in).nextInt();
if( score > 100 || score < 0){
System.out.println("请输入0 ~ 100 以内的值");
return; // 结束程序
}
if( score >= 90 && score <= 100){
System.out.println("优秀");
}else if( score >= 80 && score <= 89){
System.out.println("良好");
}else if( score >= 70 && score <= 79){
System.out.println("中等");
}else if( score >= 60 && score <= 69){
System.out.println("及格");
}else if( score < 60){
System.out.println("不及格");
}
System.out.println("程序执行完毕");
}
}
分支结构 2 switch
switch(接受整型类型的表达式) { // byte short char int 新版本添加了String类型
case 情况1: // case 后 接的类型 应与 switch 括号内的类型一致
满足情况1 的代码;
break;
case 情况2:
满足情况2 的代码;
break;
case 情况3:
满足情况3 的代码;
break;
case 情况4:
满足情况4 的代码;
break;
default:
以上情况都不满足时执行的代码;
break;// 可不写
}
public class Test_Switch{
public static void main(String[] args){
int num = 2;
switch(num){
case 'a':
System.out.println("hello world");
break;
case 0:
System.out.println(0);
break;
case 1:
System.out.println(1);
case 2:
System.out.println(2);
default:
System.out.println(-1);
}
}
}