一、选择结构----switch语句(补充)
A:switch语句的几个注意事项:
1)default在末尾中的break可以省略
2)default可以在该switch语句中的任何位置
3)case后面只能跟常量,不能跟变量,而且,多个case后面的值不能出现相同的
4)在swtich语句中:如果中间的中没有写break,会造成一个现象:case穿透
B:练习题:
1)package 选择结构语句_switch;
public class SwitchTest {
public static void main(String[] args) {
//版本1:
int x = 2;
int y = 3;
switch(x){//x的值放入switch中
default:
y++;
break;//1)语句break结束
case 3:
y++;
case 4:
y++;
}
System.out.println("y="+y);//结果:y=4
System.out.println("------------");
//版本2:
int a = 2;
int b = 3;
switch(a){
default:
b++;//2)程序默认执行到末尾
case 3:
b++;
case 4:
b++;
}
System.out.println("b="+b);//结果:b=6
}
}
2)利用case穿透现象:
package 选择结构语句_switch;
import java.util.Scanner;
/*
*盘录入月份的值,输出对应的季节
*
*3,4,5春季
*6,7,8夏季
*9,10,11秋季
*12,1,2冬季
* */
public class SwitchTest2 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个月份的值: " );
int month = sc.nextInt() ;
//使用switch语句
switch(month){//利用case穿透现象
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break ;
case 9 :
case 10:
case 11:
System.out.println("秋季");
break ;
case 12:
case 1:
case 2:
System.out.println("冬季");
break ;
default :
System.out.println("地球没有该月份!");
break ;
}
}
}
C:
1)用switch语句模拟单项选择题:
分析:
使用键盘录入数据的时候,看API发现Scanner类中没有这个方法:nextChar:接收一个字符
我们知道ASCII码表:
'A'------>65
'B'------>66
'C'------>67
'D'------>68
接收数据的时候使用int类型接收,然后在使用switch语句之前,将其强制转换为char字符类型
2)键盘录入字符串,然后选择满足条件的字符串,然后输出对应的结果;如果都不存在,提示没有该字符串:
Scanner 使用分隔符模式将其输入分解为标记,默认情况下该分隔符模式与空白匹配。然后可以使用不同的next 方法将得到的标记转换为不同类型的值。
nextInt();
nextByte();
nextShort();
nextBoolean();
nextFloat();
nextDouble();
nextString(); //错误的,正确用法应该是:
String line = sc.nextLine() ;
二、循环结构----for循环语句
A:
1)格式:
for(初始化语句;判断条件语句;步长语句(条件控制语句)){
循环体语句;
}
2)执行流程:
首先初始化语句进行赋值,然后看条件语句是否成立;
如果是true,成立,那么就执行循环体语句;
执行完毕之后,会执行条件控制语句(++/--),该变量自增1或者自减1,然后再次
判断条件语句是否成立:如果成立,就继续执行循环体语句;
如果条件语句不成立,那么for循环语句结束
3)for循环语句的注意事项:
a.有大括号的地方不能有分号,有分号的地方不能有大括号!
b.for循环语句的变量只能在本大括号里面去使用;及时的从内存中消失,有利于内存空间for循环语句结束可以去执行下面的语句;
B:练习:
1)请在控制台输出数据1-10
package 循环结构语句_for循环;
public class ForDemo{
public static void main(String[] args) {
//方式1:
for(int x = 1 ; x <= 10 ; x ++){
System.out.println(x);
}
System.out.println("------------");
//方式2:
//从0开始
for(int x = 0 ; x< 10 ; x ++){
System.out.println(x+1);
}
}
}
2)请在控制台输出数据10-1
package 循环结构语句_for循环;
public class ForDemo{
public static void main(String[] args) {
for(int x= 10 ; x>0 ; x--){
System.out.println(x);
}
}
}
3)求出1-10之间数据之和
package 循环结构语句_for循环;
/*
*需求:求1-10之间的和
*
*分析:
*0+1 = 1;
* 1 + 2 = 3 ;
* 3 + 3 = 6 ;
* 6 + 4 = 10 ;
* 10 + 5 = 15
*.....
*
*
* 有两个变量:(定义两个加数)
* 第一个变量:上一个数据的和,作为加数
* 第二个变量:该数据本身
*
* 求和思想
* */
public class ForDemo{
public static void main(String[] args) {
//定义最终结果的变量
int sum = 0 ;
//使用for循环
for(int x = 1 ; x <=10 ; x ++){
//sum = sum + x ;
sum += x ;
}
//最终输出这个结果
System.out.println("1-10之和是:" + sum);
}
}
4)求出1-100之间偶数和
package 循环结构语句_for循环;
public class ForDemo{
public static void main(String[] args) {
//求1-100之间的偶数和
//定义求和变量sum2
int sum= 0 ;
for(int x = 1; x <= 100; x ++){
//做判断
if(x%2==0){
//偶数
sum += x ;
}
}
System.out.println("1-100之间的偶数和是:" +sum2);
//方式2
int sum3 = 0;
for(int x = 0 ; x <=100 ; x +=2){
sum3 += x ;
}
System.out.println("1-100之间的偶数和是:" +sum3);
}
}
5)求出1-100之间奇数和(与4)方法相同)
6)求5的阶乘
package 循环结构语句_for循环;
/*
*阶乘的概念:
*n! = n*(n-1)!
*n! = n*(n-1)*(n-2).....3*2*1;
*
* */
public class ForDemo{
public static void main(String[] args) {
//定义最终结果的变量
int jc = 1 ;
for(int x = 1 ;x <= 5; x ++){
//变量x其实可以从2开始
for(int x = 2 ; x <=5 ; x ++){
//*=
jc *= x ;
}
System.out.println("5的阶乘是:" +jc);
}
}
7)在控制台输出所有的”水仙花数”
package 循环结构语句_for循环;
//在控制台输出所有的”水仙花数”
/*
*分析:
*什么是水仙化数(三位数):
*
*这个三位数的值本身=它的个位的立方和十位的立方还有百位的立方和
*举例:153 = 1*1*1+5*5*5+3*3*3
*
*1)水仙花数:已经告诉了一个范围
*2)使用for循环:在语句体如何获取个位的数据,十位的数据,百位的数据
*变量x
*int ge = x %10 ;
*int shi = x/10%10 ;
*int bai = x/10/10 %10;
*
*3)用if语句判断
*如果x == ge^3+shi^3+bai^3
*4)输出结果就可以
*
* */
public class ForDemo{
public static void main(String[] args){
//1)使用for循环,水仙花已经告诉范围
for(int x = 100 ; x <1000 ; x ++){
//获取每一位上的数据
//定义三个变量获取值
int ge = x %10 ;
int shi = x /10 % 10 ;
int bai = x /10/10 %10 ;
//做一个判断
if(x==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
System.out.println("水仙花是:" + x);
}
}
}
}
8)统计”水仙花数”共有多少个
package 循环结构语句_for循环;
/*
*统计"水仙花数"有多少个
*指定的是三位数组成的:并且每一个位上的数据立方和等于该数据本身
*分析:
*1)定义统计变量:count ,初始化值为0
*2)知道范围,采用for循环实现
*3)获取每个位上的数据
*4)只要满足每一个位上的数据立方和等于该数据本身:
* */
public class ForTest{
public static void main(String[] args){
//1)定义统计变量:
int count = 0 ;
//2)使用for循环
for(int x = 100 ;x < 1000; x ++){
//获取每个位上的数据然后并且进行判断
int ge = x %10 ;
int shi = x /10 % 10;
int bai = x /10/10 % 10 ;
if(x==(ge*ge*ge+shi*shi*shi+bai*bai*bai)){
System.out.println(x);
//满足条件,统计一次
count ++ ;
}
}
System.out.println("水仙花数共有:"+count+"个");
}
}
9)请在控制台输出满足如下条件的五位数
个位等于万位
十位等于千位
个位+十位+千位+万位=百位
package 循环结构语句_for循环;
/*
分析:1)5位数告诉范围,使用for循环
2)分解五位数中的每一个位上的数据
分别给每一个位上的数据进行取整然后取模
3)按照上述的三个条件进行判断
4)输出结果
*/
public class ForTest {
public static void main(String[] args){
//1)5位数告诉范围,使用for循环
for(int x = 10000;x < 100000; x++){
//2)分解五位数中的每一个位上的数据
//分别给每一个位上的数据进行取整然后取模
int ge = x %10 ;
int shi = x /10 %10 ;
int bai = x /10/10 %10 ;
int qian = x /10/10/10 %10 ;
int wan = x /10/10/10/10 % 10 ;
//3)按照上述的三个条件进行判断:
/*
* 个位等于万位
十位等于千位
个位+十位+千位+万位=百位
* */
if((ge==wan) && (shi==qian) && (ge+shi+qian+wan==bai)){
System.out.println("该数据是:" +x);
}
}
}
}
10)请统计1-1000之间同时满足如下条件的数据有多少个:
对3整除余2
对5整除余3
对7整除余2
package 循环结构语句_for循环;
/*
分析:
1)定义统计变量
2)1-1000之间属于一个范围:for循环
3)满足条件
判断
x%3==2
x%5==3
x%7==2
4)统计输出结果
*/
public class ForTest3 {
public static void main(String[] args){
//定义统计变量
int count = 0 ;
for(int x = 1 ; x <=1000; x ++){
/*
*满足如下条件
*对3整除余2
对5整除余3
对7整除余2
* */
if((x%3==2) &&(x%5==3) && (x%7==2)){
//统计
count ++ ;
System.out.println(x);
}
}
System.out.println("满足这样条件的数据共有:" + count +"个");
}
}
三、循环结构----while语句
A:
1)while语句的格式:
基本的格式:
while(条件判断语句){
循环体语句;
}
扩展的格式:
初始化语句;
while(条件判断语句){
循环体语句;
控制条件语句;
}
2) 执行流程:
初始化语句进行赋值,进入while语句:判断条件是否成立;
如果成立,执行循环体语句,控制条件语句进行自增自减,然后回来再次
判断条件是否成立,成立继续执行循环体语句,一次类推.
如果不成立,while语句结束
【for循环和while循环的区别】
1)使用区别:
如果循环结束,还想使用控制的那个变量,那么必须使用while循环;一般情况下,使用for循环,
从内存的角度来说,使用for循环好处大于while循环
2)应用场景:
如果知道一个范围:for循环
如果不明确循环的次数,使用while循环
举例:吃葡萄
B:练习:
package 循环语句_while语句;
/*
*我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
*请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
*分析:
*1)定义统计变量
*2)我国最高山峰是珠穆朗玛峰:8848m,最终厚度
*3)我现在有一张足够大的纸张,厚度为:0.01m。--->初始厚度
*4)我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
*折叠一次,是以前的2倍
*5)初始化厚度小于最终厚度:
*统计变量++
* */
public class WhileTest {
public static void main(String[] args){
//1)定义统计变量
int count = 0 ;
/*
* 2)我国最高山峰是珠穆朗玛峰:8848m,最终厚度,-- >884800
*3)我现在有一张足够大的纸张,厚度为:0.01m。--->初始厚度-->1
*
*定义初始厚度和最终厚度
* */
int start = 1 ;
int end = 884800;
//不明确次数的情况使用while
while(start<end){
//初始化厚度小于最终厚度:
//统计变量++
count ++ ;
//折叠一次,是以前的2倍
start *=2 ;
System.out.println("第"+count+"次的厚度为:"+start);
}
System.out.println("折叠" +count+"次");
}
}
四、循环结构----do-while语句
A:
1)格式:do-while循环结构语句的格式:
基本的格式:
do{
循环体语句;
}while(条件判断语句) ;
扩展的格式:
初始化语句;
do{
循环体语句;
控制条件语句;
}while(条件判断语句) ;
【do-while循环,while循环,for循环的区别】
1)do-while循环语句,循环体至少执行一次;而for循环,while循环,先判断条件语句是否成立,成立才执行循环体语句;
2)for循环和while:一般选for循环,其次是while循环,最后使用do-while循环
B:死循环的两种格式:
格式一:
while(true){
语句;
}
格式二:
for(;;){
语句;
}