浮点数运算
比较两个浮点数通常比较它们的绝对值之差是否小于一个特定值;
由于浮点数存在运算误差,所以比较两个浮点数是否相等常常会出现错误的结果。正确的比较方法是判断两个浮点数之差的绝对值是否小于一个很小的数:
// 比较x和y是否相等,先计算其差的绝对值:
double r = Math.abs(x - y);
// 再判断绝对值是否足够小:
if (r < 0.00001) {
// 可以认为相等
} else {
// 不相等
}
三元运算符
b ? x : y
判断是否满足b,满足的话输出x,否则输出y
public class Main{
public static void main(String[] args){
int n = 100;
int x = 2 >= n ? n : -n;
System.out.println(x);
}
}
字符和字符串
字符
char 用单引号
char c1 = 'A';
char c2 = '中';
// 注意是十六进制:
char c3 = '\u0041'; // 'A',因为十六进制0041 = 十进制65
char c4 = '\u4e2d'; // '中',因为十六进制4e2d = 十进制20013
字符串
String 用双引号
String s = ""; // 空字符串,包含0个字符
String s1 = "A"; // 包含一个字符
String s2 = "ABC"; // 包含3个字符
String s3 = "中文 ABC"; // 包含6个字符,其中有一个空格
多行字符串
// 用"""..."""
public class Main {
public static void main(String[] args) {
String s = """
SELECT * FROM
users
WHERE id > 100
ORDER BY name DESC
""";
System.out.println(s);
}
}
数组类型
public class Main {
public static void main(String[] args) {
int[] nums = new nums[3];
num[0] = 1;
num[1] = 2;
num[2] = 3;
System.out.println(nums)
}
}
// 数组长度:数组变量.length
System.out.println(ns.length);
// 定义的时候直接把数字初始化,系统自动判断数组长度
public class Main {
public static void main(String[] args) {
// 5位同学的成绩:
int[] ns = new int[] { 68, 79, 91, 85, 62 };
System.out.println(ns.length); // 编译器自动推算数组大小为5
}
}
// 还可以简写为
int[] ns = { 68, 79, 91, 85, 62 };
注意数组是引用类型,并且数组大小不可变
输入和输出
public class Main {
public static void main(String[] args) {
int n = 12345000;
System.out.printf("n=%d, hex=%08x", n, n); // 注意,两个%占位符必须传入两个数
}
}
println,表示输出并换行
print,表示输出不换行
printf,表示格式化输出(有占位符)
import java.util.Scanner;
public class Hello {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("print out your name:");
String name = scanner.nextLine();
System.out.print("print out you age:");
int age = scanner.nextInt();
System.out.printf("hi, you are %s, and you are %d years old", name, age);
}
}
注:printf报错,解决方法:检查项目的JDK设置,选中项目–右键–Bulid Path–ConFigure Bulid Path–Java Compiler发现JDK版本设置为1.4。修改回13,报错消失。
课后练习
import java.util.Scanner;
/*
请帮小明同学设计一个程序,
输入上次考试成绩(int)和本次考试成绩(int),
然后输出成绩提高的百分比,保留两位小数位(例如,21.75%)
*/
public class Hello {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("print out your last grade:");
int lastg = scanner.nextInt();
System.out.print("print out you this grade:");
int thisg = scanner.nextInt();
double a = (thisg - lastg)*100.0 /lastg;
//输出%System.out.print("%%")
System.out.printf("%.2f %%", a);
}
}
if判断
在Java中,判断值类型的变量是否相等,可以使用==运算符。但是,判断引用类型的变量是否相等,使用equals()方法
课后练习
import java.util.Scanner;
/*
请用if ... else编写一个程序,用于计算体质指数BMI,并打印结果。
BMI = 体重(kg)除以身高(m)的平方
BMI结果:
过轻:低于18.5
正常:18.5-25
过重:25-28
肥胖:28-32
非常肥胖:高于32
*/
public class Hello {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("print out your weight:");
double weight = scanner.nextDouble();
System.out.print("print out your height:");
double height = scanner.nextDouble();
double BMI = weight / (height * height);
if (BMI < 18.5) {
System.out.printf("过轻");
}
else if (BMI < 25) {
System.out.printf("正常");
}
else if (BMI < 28) {
System.out.printf("过重");
}
else if (BMI < 32){
System.out.printf("肥胖");
}
else {
System.out.printf("非常肥胖");
}
}
}
switch多重选择
课后练习
import java.util.Random;
import java.util.Scanner;
/*
使用switch实现一个简单的石头、剪子、布游戏rock-paper-scissors。
*/
public class Hello {
public static void main(String[] args) {
// 游戏规则
System.out.println("rock:1");
System.out.println("paper:2");
System.out.println("scissors:3");
// 用户输入
Scanner scanner = new Scanner(System.in);
System.out.print("what do you choose: ");
int mine = scanner.nextInt();
System.out.println("you choose: " + (mine==1?"rock":mine==2?"paper":mine==3?"scissors":"wrong"));
// 系统随机选择1,2,3
int system = 1 + (int)Math.random()*3;
System.out.println("system choose: " + (system==1?"rock":system==2?"paper":system==3?"scissors":"wrong"));
// 开始比赛
switch (mine-system) {
case 1:
case -2:
System.out.println("Result: win");
break;
case 0:
System.out.println("Result: equal");
break;
case -1:
case 2:
System.out.println("Result: lose");
break;
default:
System.out.println("No result");
break;
}
}
}