java 程序逻辑控制+猜数字游戏+程序调试详解
Posted @陌上初薰
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 程序逻辑控制+猜数字游戏+程序调试详解相关的知识,希望对你有一定的参考价值。
【前言】:本篇主要以代码举例的形式来讲解顺序结构、分支结构、循环结构以及输入输出的方式,最后写了一个猜数字游戏,并用画图的方式简单说了一下idea的调试方式,旁观者清,如发现有错误,请及时评论或私信指正,欢迎来访!!!
顺序结构
按照代码书写的执行顺序一行一行的执行
如:
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
// 运行结果
aaa
bbb
ccc
如果调整代码的书写顺序, 则执行顺序也发生变化
System.out.println("aaa");
System.out.println("ccc");
System.out.println("bbb");
// 运行结果
aaa
ccc
bbb
分支结构
if 语句
基本语法形式1:单分支
if(布尔表达式){
//条件满足时执行代码
}
代码示例:
public static void main(String[] args) {
int a = 10;
if (a == 10) {
System.out.println(a);
}
}
基本语法形式2:双分支
if(布尔表达式){
//条件满足时执行代码
}else{
//条件不满足时执行代码
}
代码示例1:判断一个数是奇数还是偶数
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);//System.in:从键盘获取数据
int a = scanner.nextInt();//输入一个整数
System.out.println(a);//将你输入的整数输出
if (a % 2 == 0) {
System.out.println("a是偶数");
} else {
System.out.println("a是奇数");
}
}
1).Scanner scanner = new Scanner();输入一个整数的固定写法,使用Scanner需要导包(import java.util.Scanner),他这个包一般都会自动导入,这个包类似于C语言的include
2).scanner:是我们自己设置的变量
3)System.in:从键盘获取数据
4)不知道Scanner在哪个包底下怎么办?查帮助手册
代码示例2:判段某一年份是否是闰年
public static void main4(String[] args) {
Scanner scanner = new Scanner(System.in);
int year = scanner.nextInt();//输入一个整数
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
System.out.println("这一年是闰年");
} else {
System.out.println("这一年不是闰年");
}
}
普通闰年:公历年份是4的倍数的,且不是100的倍数(year % 4 == 0 && year % 100 != 0 ),为普通闰年(如2004年、2020年就是闰年)。
世纪闰年:公历年份是整百数的,必须是400的倍数(year % 400 == 0)才是世纪闰年(如1900年不是世纪闰年,2000年是世纪闰年)。
基本语法形式3:多分支
if(布尔表达式){
//条件满足时执行代码
}else if(布尔表达式){
//条件满足时执行代码
}else{
//条件都不满足时执行代码
}
代码示例3:判断一个数字是正数还是负数
public static void main3(String[] args) {
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();//输入一个整数
if (num > 0) {
System.out.println("num为正数");
} else if (num < 0) {
System.out.println("num为负数");
} else {
System.out.println("num既不是正数也不是负数");
}
}
注意事项: 悬垂 else 问题
public static void main5(String[] args) {
//if...else语句不加大括号只能写一条语句,建议加上大括号
int x = 10;
int y = 10;
if (x == 10)
if (y == 10)
System.out.println("aaa");
else
System.out.println("ccc");
}
运行结果:
1)结论:else只会和与它最接近的if匹配
2)为避免悬垂 else 问题出现:建议加上大括号,if…else语句不加大括号只能写一条语句。
3)注意:java代码风格是将左大括号与if/else 放在同一行
switch语句
基本语法
switch(整数|枚举|字符|字符串){
case 内容1 : {
内容满足时执行语句;
[break;]
}
case 内容2 : {
内容满足时执行语句;
[break;]
}
...
default:{
内容都不满足时执行语句;
[break;]
}
}
代码示例:
public static void main6(String[] args) {
// int a=1;
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt();
switch (a) {//a是switch的参数,类型是int
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
break;
default:
System.out.println("输入有误");
break;
}
}
代码示例4: 根据 day 的值输出星期
public static void main6(String[] args) {
int day = 1;
switch(day) {
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 中值的不同, 会执行对应的 case 语句. 遇到 break 就会结束该 case 语句.
如果 switch 中的值没有匹配的 case, 就会执行 default 中的语句,建议一个 switch 语句最好都要带上 default.
注意事项:
1)在Java语言当中不能做switch的参数的数据类型有哪些?
long、float、double、boolean
2)不写 break 的时候, case 语句会依次向下执行, 从而失去了多分支的效果.
3)switch中的值只能是整数、枚举、字符、字符串
switch 不能表达复杂的条件如:(num > 10 && num < 20)
循环结构
while循环
基本语法格式:
while(循环条件){
循环语句;
}
循环条件为true,则执行循环语句,否则结束循环
代码示例5:打印1~9的数字
public static void main(String[] args) {
int num = 1;
while (num != 10) {
System.out.println(num);
num++;
}
}
代码示例6:计算1~100的和
public static void main10(String[] args) {
int i = 1;
int sum = 0;
while (i <= 100) {
sum += i;
i++;
}
System.out.println(sum);
}
代码示例7:计算1~100的奇数和,偶数和
public static void main11(String[] args) {
int sumOdd = 0;//1~100奇数和
int sumEve = 0;//1~100偶数和
int i = 1;
while (i <= 100) {
sumOdd += i;
i += 2;
}
System.out.println(sumOdd);
i = 2;//改变i的初值
while (i <= 100) {
sumEve += i;
i += 2;
}
System.out.println(sumEve);
}
打印结果:
代码示例8:计算n的阶乘
public static void main12(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();//输入一个整数
int ret = 1;
int i = 1;
while (i <= n) {
ret *= i;
i++;
}
System.out.println(ret);
}
运行结果:
代码示例9:求1!+2!+3!+4!+5!(1~n)的阶乘的和
public static void main13(String[] args) {
Scanner scanner = new Scanner(System.in);//System.in:从键盘获取数值
int n = scanner.nextInt();
int sum = 0;
int j = 1;
// 外层循环负责求阶乘的和
while (j <= n) {//循环是可以嵌套的
int ret = 1;
int i = 1;
// 里层循环负责完成求阶乘的细节.
while (i <= j) {
ret *= i;
i++;
}
sum = sum + ret;
j++;
}
System.out.println(sum);
}
打印结果:
注意事项
1).和 if 类似, while 下面的语句可以不写 { } , 但是不写的时候只能支持一条语句. 建议还是加上 { }
2).和 if 类似, while 后面的 { 建议和 while 写在同一行.
3).和 if 类似, while 后面不要多写 分号, 否则可能导致循环不能正确执行
break
break 的功能是让循环提前结束.
代码示例:
public static void main(String[] args) {
int i = 1;
while (i <= 10) {
if (i == 6) {
break;//break结束所有循环
}
System.out.println(i);
i++;
}
}
代码示例10: 找到 100 - 200 中第一个 3 的倍数
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 3 == 0) {
System.out.println("找到了 3 的倍数, 为:" + num);
break;
}
num++;
}
}
打印结果:
continue
continue 的功能是跳过这次循环, 立即进入下次循环.
代码示例11: 找到 100 - 200 中所有3 的倍数
public static void main(String[] args) {
int num = 100;
while (num <= 200) {
if (num % 3 != 0) {
num++; // 这里的 ++ 不要忘记! 否则会死循环.
continue;
}
System.out.println("找到了 3 的倍数, 为:" + num);
num++;
}
}
执行到 continue 语句的时候, 就会立刻进入下次循环(判定循环条件), 从而不会执行到下方的打印语句
代码示例12:找到 1~100之间既能被3整除又能被5整除的数字
//方法1:
public static void main16(String[] args) {
int i = 1;
while (i <= 100) {
if (i % 3 != 0 || i % 5 != 0) {
i++;
continue;
}
System.out.println(i);
i++;
}
}
//方法2:使用最小公倍数
public static void main17(String[] args) {
int i = 1;
while (i <= 100) {
if (i % 15 != 0) {
i++;
continue;
}
System.out.println(i);
i++;
}
}
打印结果:
for 循环
基本语法
for(表达式1;表达式2;表达式3){ //表达式2一定是一个布尔表达式
循环体;
}
//表达式1: 用于初始化循环变量.
//表达式2: 循环条件
//表达式3: 更新循环变量.
//相比于 while 循环, for 循环将这三个部分合并在一起, 写代码时不容易遗漏.
代码示例13:打9印1到9的数字
public static void main18(String[] args) {
for(int i=1;i<=10;i++){
System.out.println(i);
}
}
代码示例14:计算1-100的和
public static void main19(String[] args) {
int i=0;
int sum=0;
for(i=1;i<=100;i++){
sum+=i;
}
System.out.println(sum);
}
代码示例15:计算1!+2!+3!+4!+5!
public static void main21(String[] args) {
int sum=0;
int i=1;
//第一个for循环是产生1到5的数字
for(i=1;i<=5;i++){
//第二个for循环是求一个数的阶乘
int ret=1;
for(int j=1;j<=i;j++){//
ret*=j;
}
sum+=ret;//求和
}
System.out.println("result="+sum猜数字游戏