Day12-if选择结构
Day12-if选择结构
if单选择结构
我们很多时候需要去判断一个东西是否可行,然后我们才去执行,这样一个过程在程序中用if语句来表示
语法:
if(布尔表达式)
{
//如果布尔表达式为true将执行的语句
}
实例:判断输入的字符串是不是Hello
Scanner scanner = new Scanner(System.in);
System.out.println("请输入");
String s= scanner.nextLine();
//equals:判断字符串是否相等
if(s.equals("Hello")){
System.out.println(s);
}else System.out.println("字符串不相等");
Scanner close;
注意:
equals:判断字符串内容是否相等
易错:
import java.util.Scanner;
public class Exercise {
public static void main(String[] args) {
//实例:判断输入的字符串是不是Hello
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
String a=scanner.next();
if(a=="Hello"){ //在 Java 中,比较两个字符串是否相等不能使用 == 运算符-------------------
System.out.println("输入的"+a+"是Hello");
}else {
System.out.println("输入的"+a+"不是Hello");
}scanner.close();
}
}
在 Java 中,比较两个字符串是否相等不能使用 == 运算符。
易错!!!!!!
在 Java 中,使用 ==
来比较字符串时,它比较的是两个字符串对象的引用是否相等
而不是它们所包含的字符内容是否相等。
例如:
示例一:不同方式创建的字符串对象
public class StringComparisonExample {
public static void main(String[] args) {
// 通过直接赋值创建字符串对象
String str1 = "Hello";
// 通过new关键字创建字符串对象
String str2 = new String("Hello");
// 使用 == 比较
if (str1 == str2) {
System.out.println("str1和str2引用相等");
} else {
System.out.println("str1和str2引用不相等");
}
// 使用equals方法比较内容
if (str1.equals(str2)) {
System.out.println("str1和str2内容相等");
} else {
System.out.println("str1和str2内容不相等");
}
}
}
在上述示例中:
- 当我们使用
String str1 = "Hello";
这种方式创建字符串时,Java 会先在字符串常量池中查找是否已经存在值为"Hello"
的字符串对象。如果存在,就直接将str1
指向该对象;如果不存在,就会在字符串常量池中创建一个新的"Hello"
对象并让str1
指向它。 - 而通过
String str2 = new String("Hello");
创建字符串时,会在堆内存中创建一个新的字符串对象,无论字符串常量池中是否已经存在"Hello"
这个值。所以str2
指向的是堆内存中新建的这个对象。
当我们使用 ==
比较 str1
和 str2
时,因为它们指向的是不同内存区域的对象(str1
指向字符串常量池中的对象,str2
指向堆内存中的对象),所以 ==
的结果是 false
,即它们的引用不相等。但使用 equals
方法比较时,会逐个字符比较它们所包含的内容,由于内容都是 "Hello"
,所以 equals
的结果是 true
,即它们的内容相等。
示例二:两个相同直接赋值的字符串对象
public class AnotherStringExample {
public static void main(String[] args) {
String s1 = "Java";
String s2 = "Java";
if (s1 == s2) {
System.out.println("s1和s2引用相等");
} else {
System.out.println("s1和s2引用不相等");
}
if (s1.equals(s2)) {
System.out.println("s1和s2内容相等");
} else {
System.out.println("s1和s2内容不相等");
}
}
}
在这个示例中,s1
和 s2
都是通过直接赋值的方式创建字符串对象,并且赋值的内容都是 "Java"
。当第一次执行 String s1 = "Java";
时,会在字符串常量池中创建一个 "Java"
对象,然后 s1
指向它。当执行 String s2 = "Java";
时,Java 会先在字符串常量池中查找是否已经存在值为 "Java"
的对象,发现已经存在(就是之前创建给 s1
指向的那个对象),于是 s2
也直接指向这个已存在的对象。
所以,当使用 ==
比较 s1
和 s2
时,结果是 true
,因为它们指向的是同一个对象(在字符串常量池中的同一个 "Java"
对象),引用是相等的。同时,使用 equals
方法比较内容,结果也是 true
,因为它们的内容确实相同。
综上所述,在 Java 中,==
用于比较两个对象的引用是否指向同一个内存地址,而对于字符串,我们通常更关心它们的内容是否相同,所以应该使用 equals
方法来进行准确的内容比较。
综上所述:对于 String
类型的对象,应该使用 equals()
方法来比较它们的内容。
if双选择结构----if-else
if双选择结构
那现在有个需求,公司要收购一个软件,成功了,给人支付100万元,失败了,自己找人开发。这样的需求用一个if就搞不定,我们需要有两个判断,需要一个双选结构,所以就有了if-else结构。
语法:
if(布尔表达式){
//如果布尔表达式的值为true
}else{
//如果布尔表达式的值为false
}
实例:判断考试分数是否及格
Scanner scanner = new Scanner(System.in);
System.out.println("请输入本次考试分数:");
//考试分数大于60分是及格,小于60分不及格
int score= scanner.nextInt();
if(score<60){
System.out.println(score+"这个分数不及格,Do not pass the exam");
}else {
System.out.println("Pass the exam");
}
Scanner close;
if多选择结构------if--else if--else
我们发现刚才的代码不符合实际情况,真实的情况还可能存在ABCD,存在区间多级判断。比如90-100就是A,80-90 就是B..等等,在生活中我们很多的时候的选择也不仅仅只有两个,所以我们需要一个多选择结构来处理这类问题!
语法:if----else if----if
if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}
实例:对考试成绩分级
Scanner scanner = new Scanner(System.in);
System.out.println("请输入本次考试分数:");
//考试分数大于60分是及格,小于60分不及格
int score= scanner.nextInt();
if(score>100){
System.out.println("成绩造假");
}else if (score==100){
System.out.println("成绩满分");
} else if (score<100&&score>90) {
System.out.println("成绩优秀");
} else if (score<90&&score>=70) {
System.out.println("成绩为良");
} else if (score<70&&score>=60) {
System.out.println("成绩一般");
}else System.out.println("成绩不及格1");
Scanner close();
注意:
if 语句至多有 1 个 else 语句,else 语句在所有的 else if 语句之后。
if 语句可以有若干个 else if 语句,它们必须在 else 语句之前。
一旦其中一个 else if 语句检测为 true,其他的 else if 以及 else 语句都将跳过执行
if嵌套结构
嵌套的 if 结构使用嵌套的 if...else 语句是合法的,可以在另一个 if 或者 else if 语句中使用 if 或者 else if 语句,也可以像 if 语句一样嵌套 else if...else。
语法:
if (布尔表达式 1)
{
// 如果布尔表达式 1 的值为 true 执行代码;
if (布尔表达式 2)
{
//如果布尔表达式 2 的值为 true 执行代码
}
}。