4.1 结构的分类
1、顺序结构,程序从main方法开始从上到下,依次执行所有的语句。
2、选择结构(分支结构),程序从main方法开始从上到下这时有了选择的条件,让程序根据条件进行选择走哪条路,意思就是有的代码会执行,有的代码呢不会执行
3、循环结构, 程序从main方法开始从上到下这时有了循环的结构,让程序代码,在循环结构一直重复性的执行某一件事情,一直到条件判断结束
4.2 选择构造
if结构
代码语言:javascript复制语法:
说明:条件就是关系或逻辑表达式
if(条件){
要执行的代码
}
执行流程: 进入if进行条件判断,如果条件为真,执行if后面大括号中的内容,执行完成后跳出if结构执行后面的操作,如果条件为假,直接执行后面的操作,不进入if结构
如下所示:
代码语言:javascript复制public class Demo8 {
public static void main(String[] args) {
//从键盘输入一个星期数,如果输入的是6就代表是星期6,这时我就去钓鱼
Scanner input = new Scanner(System.in);
System.out.println("请输入一个星期数");
int week=input.nextInt();
if(week==6){
System.out.println("去钓鱼");
}
System.out.println("程序结束");
}
}
问题:字符串的判断呢?
错误的判断方式:
代码语言:javascript复制public class Demo8 {
public static void main(String[] args) {
//从键盘输入一个星期数,如果输入的是6就代表是星期6,这时我就去钓鱼
Scanner input = new Scanner(System.in);
System.out.println("请输入一个星期数");
String week=input.next();
if(week=="星期六"){//判断是错误的,==不能用与字符串的判断
System.out.println("去钓鱼");
}
System.out.println("程序结束");
}
}
正确的判断方式:
public class Demo8 {
public static void main(String[] args) {
//从键盘输入一个星期数,如果输入的是6就代表是星期6,这时我就去钓鱼
Scanner input = new Scanner(System.in);
System.out.println("请输入一个星期数");
String week=input.next();
if("星期六".equals(week)){
System.out.println("去钓鱼");
}
System.out.println("程序结束");
}
}
main中定义的变量都叫局部变量,局变量都会在栈中开辟一块空间,这个空间如果是基本数据类型就直接存值,如果是引用 数据类型就存堆的地址。
所以,字符串要用equals()方法来进行等值判断,==作的是内存地址判断
注意equals的使用一般都两个字符串之间进行等值判断,要求常量型数据写在前面,变量型数据写在后面, 例如 "星期六".equals(week) 如果week为null 时程序不报错. null 空 没有 一般用于定义引用型变量时不知道给什么值的时候,等待程序运行过程中给定值。
新的问题:
代码语言:javascript复制public class Demo9 {
public static void main(String[] args) {
String str1="礼拜六";
String str2="礼拜六"; //为同一对象,同一对象就是同一地址
if(str1==str2){ //这又能判断正确
System.out.println("去钓鱼");
}
System.out.println("程序结束");
}
}
打印结果:
去钓鱼
程序结束
if...else结构
代码语言:javascript复制语法:
if(条件){
//条件正确时执行的代码
}else{
//条件错误时执行的代码
}
执行流程,根据if里的条件进行判断,条件为真时执行if后面括号中的代码,如果条件为假,执行else后面括号里的代码。
代码语言:javascript复制public class Demo10 {
public static void main(String[] args) {
//查看这次张鹏的考试成绩,如果及格今晚张鹏就不上晚自习,如果不及格,今晚加班到十二点
Scanner input =new Scanner(System.in);
System.out.println("请输入张鹏的成绩:");
double score=input.nextDouble();
if(score>=60){
System.out.println("今晚不上晚自习");
}else{
System.out.println("今天加班到十二点");
}
System.out.println("程序结束");
}
}
代码语言:javascript复制public class Demo11 {
public static void main(String[] args) {
//查看这次张鹏的考试成绩,如果及格今晚张鹏就不上晚自习,如果不及格,今晚加班到十二点
//正确的成绩是0-100分 才参与判断,不然直接打印 "输入的数据错误"
//键盘输入这就是第一步,必须这样写
Scanner input =new Scanner(System.in);
//键盘输入前,给出提示 System.out.println 打印语句
System.out.println("请输入张鹏的成绩:");
//input.nextDouble()从键盘输入小数并存放到变量中score
double score=input.nextDouble();
//score>=0 && score<=100 数据区间的判断
if(score>=0 && score<=100){
if(score>=60){
System.out.println("不上晚自习");
}else{
System.out.println("今晚加班到十二点");
}
}else{
System.out.println("输入的数据错误");
}
}
}
代码语言:javascript复制public class Demo12 {
public static void main(String[] args) {
//查看这次张鹏的考试成绩,如果及格今晚张鹏就不上晚自习,如果不及格,今晚加班到十二点
//正确的成绩是0-100分 才参与判断,不然直接打印 "输入的数据错误", 如果在输入数据的时候人家故意输入字符串而不是小数,需要进行拦截
Scanner input = new Scanner(System.in);
System.out.println("请输入张鹏的成绩:");
/*
输入一个数据进来,先进行判断当前输入的数据是不是判断的类型,如果是结果true,如果不是结果是false
*/
if(input.hasNextDouble()){
System.out.println("输入的是小数");
/*
这里会将上面hasNextDouble()输入的值直接存入到变量中,不再进行二次输入
*/
double score = input.nextDouble();
if(score>=0 && score<=100){
if(score>=60){
System.out.println("不上晚自习");
}else{
System.out.println("今晚加班到十二点");
}
}else{
System.out.println("输入的数据错误");
}
}else{
System.out.println("输入的不是小数");
}
}
}
if结构可以写任何代码,可以嵌套任意层if
如果判断输入的类型是不是整型 input.hasNextInt()来判断
if...else if....else if..........else....... 多重if
代码语言:javascript复制语法:
if(条件1){
//代码块1
}else if(条件2){
//代码2
}else if(条件3){
//代码块3
}....
else if(条件n){
//代码块n
}else{
//代码块else
}[else 可选]
判断条件1,条件为真,执行代码块1,否则判断条件2,条件2为真,执行代码块2,否则继续判断下面的条件,如果所有的条件都不满足时执行else中的操作
代码语言:javascript复制import java.util.Scanner;
public class Demo13 {
public static void main(String[] args) {
//输入张鹏的语文成绩,90-100 A 80-89 B 70-79 C 60-69 D 60以下 E 没有在这区间内的数据判定数据错误
Scanner input = new Scanner(System.in);
System.out.println("请输入张鹏的语文成绩:");
if(input.hasNextInt()) {
int score = input.nextInt();
if(score>=90 && score<=100){
System.out.println("A");
}else if(score>=80 && score<=89){
System.out.println("B");
}else if(score>=70&& score<=79){
System.out.println("C");
}else if(score>=60&&score<=69){
System.out.println("D");
}else if(score>=0 && score<=59){
System.out.println("E");
}else {
System.out.println("不是有效范围的数据");
}
}else{
System.out.println("输入的数据不是整数");
}
}
}
上下条件具有一定的关联性例子:
代码语言:javascript复制public class Demo14 {
public static void main(String[] args) {
//输入张鹏的语文成绩,90-100 A 80-89 B 70-79 C 60-69 D 60以下 E 没有在这区间内的数据判定数据错误
Scanner input = new Scanner(System.in);
System.out.println("请输入张鹏的语文成绩:");
if(input.hasNextInt()) {
int score = input.nextInt();
if(score<0 || score>100){
System.out.println("不是有效范围的数据");
}else if(score>=90){
System.out.println("B");
}else if(score>=80){
System.out.println("A");
}else if(score>=70){
System.out.println("C");
}else if(score>=60){
System.out.println("D");
}else if(score>=0){
System.out.println("E");
}
}else{
System.out.println("输入的数据不是整数");
}
}
}
第一,这里的区间判断不需要后面的条件,因为上一个条件已经帮下一个条件限定了区间范围
第二、每一个条件必须按照排定的顺序编写,不能随意差位,不然会影响结果的执行。
switch结构
代码语言:javascript复制switch(整数变量|字符变量|字符串变量){
case 常量值1:
//代码块1
break;
case 常量值2:
//代码块2
break;
case 常量值3:
//代码块3
break;
....
default:
//上面所有的case都没有相等的值时,执行
break;
}
switch是通过case 后指定的常量值与switch括号中的变量进行等值对比,能对比上(也就是相等)就进入到对应的case项中执行这个case项与最近一个break;之间的代码,如果一个case项缺少break;那么代码的执行,执行完了当前case项中的代码后,会串入下一个case项进行执行。 break;就是跳出switch结构的代码,遇见break,switch就结束。
代码语言:javascript复制import java.util.Scanner;
public class Main6 {
public static void main(String[] args) {
//switch可以替换多重if中等值判断的情况
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个数:");
int week=input.nextInt();
switch (week){
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
break;
default:
System.out.println("输入错误");
break;
}
}
}
switch只能用于等值判断,多重if中等值判断的情况可以用switch替换,但是switch只能判断byte ,short,long,int,char,String类型的数据
代码语言:javascript复制问题:输入一个月份,输出这个月有多少天?默认二月只有28
import java.util.Scanner;
public class Main8 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个月份:");
int month=input.nextInt();
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(31);
break;
case 2:
System.out.println(28);
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(30);
break;
default:
System.out.println("输入错误");
break;
}
}
}
如果要加上平年润年的判断 平年2月是28天,润年2月是29天
判断润年的条件是 year%4==0&&year0!=0||year@0==0
代码语言:javascript复制import java.util.Scanner;
public class Main8 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个年份:");
int year=input.nextInt();
System.out.println("请输入一个月份:");
int month=input.nextInt();
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(31);
break;
case 2:
if(year%4==0&&year0!=0||year@0==0){
System.out.println(29);
}else {
System.out.println(28);
}
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(30);
break;
default:
System.out.println("输入错误");
break;
}
}
}
太累了兄弟们,一个小时弄的,祈求大家给个赞!谢谢