目录
流程控制
输入、输出
下列代码为例:
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);//创建 Scanner对象
System.out.println("Input your name:");//打印提示
String name=scanner.newxtLine();//读取并获取字符串
System.out.println("Input your age:");//打印提示
int age=scanner.nextInt();//取并获取整数
System.out.print(name+" is "age+" years old!")//输出
}
}
首先,我们通过import
语句导入java.util.Scanner,import是导入某个类的语句,必须放到Java源代码的开头,后面我们在Java的package中会详细讲解如何使用import。
然后,创建Scanner
对象并传入System.in。System.out代表标准输出流,而System.in代表标准输入流。直接使用System.in读取用户输入虽然是可以的,但需要更复杂的代码,而通过Scanner就可以简化后续的代码。
有了Scanner对象后,要读取用户输入的字符串,使用scanner.nextLine()
,要读取用户输入的整数,使用scanner.nextInt()
。Scanner会自动转换数据类型,因此不必手动转换
if判断
-
if
的基本语法
if(){
}
根据if中的计算结果,JVM决定是否执行if语句块
-if可与else连用
if(){
}else{
}
else
后还与多个if...else if...
串联
-
判断引用类型相等 在Java中,判断值类型的变量是否相等,可以使用==运算符。但是,判断引用类型的变量是否相等,==表示“引用是否相等”,或者说,是否指向同一个对象。
例如,下面的两个String类型,它们的内容是相同的,但是,分别指向不同的对象,用==判断,结果为false:
public class Main{
public static void main(String[] args){
String s1="hello";
String s2="HELLO".toLowerCase();
System.out.println(s1);
System.out.println(s2);
if(s1==s2){
System.out.println("s1==s2");
}else{
System.out.println("s1!=s2");
}
}
}
输出结果:
hello
hello
s1!=s2
要判断引用类型的变量内容是否相等,必须使用equals()
方法:
public class Main{
public static void main(String[] args){
String s1="hello";
String s2="HELLO".toLowerCase();
System.out.println(s1);
System.out.println(s2);
if(s1.equals(s2)){
System.out.println("s1 equals s2");
}else{
System.out.println("s1 not equals s2");
}
}
}
输出结果:
hello
hello
s1 equals s2
-
练习 请用
if ... else
编写一个程序,用于计算体质指数BMI,并打印结果。
BMI = 体重(kg)除以身高(m)的平方
BMI结果:
过轻:低于18.5 正常:18.5-25 过重:25-28 肥胖:28-32 非常肥胖:高于32
参考:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("Input your weight(kg):");
float weight=scanner.nextFloat();
System.out.println("Input your hight(m):");
float hight=scanner.nextFloat();
float bmi=weight/(float) Math.pow(hight, 2);
System.out.println(bmi);
if(bmi<18.5) {
System.out.println("过轻");
}else if(bmi<25){
System.out.println("正常");
}else if(bmi<28) {
System.out.println("过重");
}else if(bmi<32) {
System.out.println("肥胖");
}else {
System.out.println("非常肥胖");
}
}
}
switch多重选择
除了if语句外,还有一种条件判断,是根据某个表达式的结果,分别去执行不同的分支。
-
switch
的基本语法
int option=1;
switch(option){
case 1:
System.out.println("Selected 1");
break;
case 2:
System.out.println("Selected 2");
break;
case 3:
Sysytem.out.println("Selected 3");
break;
default:
System.out.println("Not selected");
break;
}
结果:
Selected 1
-
default
的作用 当option的值在分支中没有时,将转到default对应的内容。 -
break
的作用 结束选择分支,若没有break,会接着执行下一个分支,直到break跳出选择分支;
和default都为switch中不能忘记的; -
option也可以为字符串 switch在字符串匹配时,是比较内容;
-
switch
表达式
int opt;
switch (fruit) {
case "apple":
opt = 1;
break;
case "pear":
case "mango":
opt = 2;
break;
default:
opt = 0;
break;
从java12开始(12,13,14),switch升级为更简单的表达形式,新语法没有穿透效应,不要再写break;
public class Main{
public static void main(String[] args){
String fruit="apple";
int opt=switch(fruit){
case "apple"->1;
case "pear","mango"->2;
default->0;
};//赋值语句以;结尾
System.out.println("opt="+opt);
}
}
-
yield
如果需要复杂的语句,我们也可以写很多语句,放到{...}里,然后,用yield返回一个值作为switch语句的返回值:
public class Main{
public static void main(String[] args){
String fruit="orange";
int opt=switch(fruit){
case "apple"->1;
case "pear","mango"->2;
default->{
int code=friut.hanshCode();
yield code;
}
}
}
}
-
练习 使用switch实现一个简单的石头、剪子、布游戏。
参考:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
while(true) {
System.out.println("Rock(石头)");
System.out.println("Scissors(剪刀)");
System.out.println("Paper(布)");
System.out.println("end&continue");
System.out.println("Input your chioce:");
Scanner sc=new Scanner(System.in);
String chioce=sc.next();
int comp=(int)(Math.random()*3);//Math.random()表示【0,1)的浮点型
System.out.print("Computer:");
judge(chioce,comp);
System.out.println("输入0继续游戏!");
String s=sc.next();
if(s.equals("end"))break;
}
}
public static void judge(String chioce,int comp) {
String flag=null;
switch(comp) {
case 0:
System.out.println("Rock");
flag="Rock";
break;
case 1:
System.out.println("Scissors");
flag="Scissors";
break;
case 2:
System.out.println("Paper");
flag="Paper";
break;
default :
break;
}
panduan(chioce,flag);
}
public static void panduan(String chioce,String flag) {
if(chioce.equals(flag)) {
System.out.println("平局!");
}else {
if((chioce.equals("Rock")&&flag.equals("Scissors"))||(chioce.equals("Scissors")&&flag.equals("Paper"))||(chioce.equals("Paper")&&flag.equals("Rock"))) {
System.out.println("you win!");
}else {
System.out.println("you lose!");
}
}
}
}
while循环
-
基本语法
while(条件表达式){
}
当条件表达式为true
时就会执行{}
中的语句,然后再次循环(无break);
避免 死循环即条件表达式一直为true;
-
练习 使用while计算从m到n的和:
参考:
public class Main{
public static void main(String[] aegs){
int sum=0;
int m=20;
int n=100;
while(m!=(n+1){
sum+=m;
m++;
}
System.out,println(sum);
}
}
do while循环
while
循环是先判断循环条件,再执行循环。而另一种do while
循环则是先执行循环,再判断条件,条件满足时继续循环,条件不满足时退出。
基本语法:
do{
}while(条件表达式);//最后要加 ;
-
练习 使用do while循环计算从m到n的和。
public class Main {
public static void main(String[] args) {
int sum = 0;
int m = 20;
int n = 100;
do {
sum+=m;
m++
} while (m!=(n+1));
System.out.println(sum);
}
}
for循环
-
基本语法
for(初始条件;循环检测条件;循环后更新计数器){
///执行语句
}
-
灵活使用for语句
for
循环可以缺少初始条件、循环条件和循环更新语句 -
for each循环 Java提供了另一种
for each
循环,更简单地遍历数组;
public class Main{
public static void main(String[] args){
int[] ns={1,12,23,34,45,6}
for(int n:ns){
System.out.println(n);
}
}
}
输出结果:
1
12
23
34
45
6
和for循环相比,for each
循环的变量n不再是计数器,而是直接对应到数组的每个元素。for each循环的写法也更简洁。但是,for each循环无法指定遍历顺序,也无法获取数组的索引。
除了数组外,for each循环能够遍历所有“可迭代”的数据类型,如List、Map等。
-
练习 1.给定一个数组,请用
for
循环倒序输出每一个元素: 参考:
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 4, 9, 16, 25 };
for (int i=ns.lenght;i>0;i--) {
System.out.println(ns[i]);
}
}
}
2.利用for each
循环对数组每个元素求和: 参考:
public class Main {
public static void main(String[] args) {
int[] ns = { 1, 4, 9, 16, 25 };
int sum = 0;
for (int n:ns) {
sum+=n;
}
System.out.println(sum); // 55
}
}
3.圆周率π可以使用公式计算: 参考:
public class Main {
public static void main(String[] args) {
double pi = 0;
for (long i=1,j=-1;i<=999999999;i++) {
j=-1*j;
double a=j*(2*i-1);
pi+=4*(1/a);
}
System.out.println(pi);
}
}
break和continue
-
break 在循环过程中,可以使用break语句跳出__当前__循环。
-
continue break会跳出当前循环,也就是整个循环都不会执行了。而continue则是提前结束本次循环,直接继续执行下次循环。