选择分支结构中
第一种结构语句: if语句
if (条件) {} else{}
if(条件){}else if {} else{}
多个else if结合效率低,因为对于if是条件都要进行判断
第二种结构语句: switch语句
结构:
Switch(变量)
{
case 变量的取值(整数,char,字符串):
break;当你执行完选项值后,就要退出,大部分情况结合break
default:相当于else
}
底层原理:
switch(变量)-----à字节码--àhashCode()(顺序的结构表)
在case变量中使用equals
使用场景:只要可以限定if条件语句值,都可以使用switch,但如果区间,只能用if(> < >= <=),区间段的程序没有办法做switch
等于:凡是字符串使用equals,凡是数值就可以用等号。
当程序中出现的语句不停复制,粘贴,程序的代码出现重码率。
在程序执行过程中,出现语句重复,可以考虑java循环结构。
包括3种结构
第一种: While循环
While(条件){
循环体
}
满足条件就进行循环体中语句的执行
第二种:
for循环
for(循环变初值;循环变量条件;循环变量增长量){
循环体
}
只要循环变量在做增长量后满足循环变量的条件进行循环体的语句执行。
第三种
do{
循环体
}while(条件)
先做一次循环体,做完一次判断条件,如果满足条件,继续作循环体.
经常用到的: for 循环;while 循环;do{}while()循环很少写
基本程序,体会循环的结构.
求1-100的和(使用while和for实现一次)
思路图:
Sum初值为1的程序如下.
public class test_while_sum1 {
public static void main(String[] args) {
//while求1-100的和值
//int sum=1+2+3+4+5+6+7+....+100,这个程序中1,2,3,4,....,重复不停地敲等差的数字,重复的部分用循环解决
//循环内容:重复的劳动,重复的内容是1,2,3,4,......,使用循环产生数字。
//程序的开发是需要变量的,这里变量num num的值是1,2,3,4,.....,这个变化的数字就是全局变量,最终的和值sum
//定义全局变量, num每一个重复输入的等差数,sum最终的结果
int num;
//sum不提供初值,在后面的计算会报错,因为进入循环后,num=1就被覆盖了,这里sum直接等于1
int sum=1;
//产生num,num是从1开始加到100,num就应该有初始值。
num=1;
//接下来变量不停加1,再赋给自己,后面不停地复制,使用while限制num的值
while(num<100){
//因为sum初值为1,先进行num加,后面再进行sum,注意在while条件中会多出101,把num限定在num<100
//不停把num值相加,num值产生100个数
num=num+1;
System.out.println("num-----"+num);
//先求和,再算num的值
//接下来把num的和值放在sum,
sum=sum+num;
System.out.println("sum----"+sum);
}
//当循环体中100个数全部加成功,就可以输出sum值
System.out.println(sum);
}
}
如果做累乘.
注意:while和for的区别
for循环的语句一定循环变量的初值和终值的范围,使用for循环循环几次.
While(只有一个条件),只要条件满足就执行,有的时候,程序无法预测条件什么时间满足,这时使用while.
注意:循环不要循环大数字100000000;
**********循环类的精典程序*********
三位数,每人数的立方和等于数字本身,给定区间,求区间内所有水仙花数。
public class Xxx { public static void main(String[] args) { // while 循环 求水仙花数 int n; n = 100; while(n <999) { int a = n / 100; //求百位 int b = n % 100 /10;//求十位 int c = n% 10;// 求个位 if (a*a*a + b*b*b + c*c*c == n) { System.out.println(n); } n++;// n每次自增1 } } }
2..Java中使用for循环输出1~100 的奇数和:
public class XXx { public static void main(String[] args) { int i=1; int sum=0; for(;i<100;i+=2) { sum+=i; } System.out.println(sum); } }
猜价格
在后台,系统随机产生价格数字,由用户通过平台猜,猜出一个数字后,系统机器人通知你信息,大了,小了。再说一个数字,直到数字跟系统随机数字一致就游戏结束。
分析逻辑:
系统产生随机数字一次
用户猜
Input.next()
系统判断数字是大了,还是小了 if
这里循环:next()输入语句需要循环,if判断需要循环
循环条件:当价格=系统产生的随机价格退出
循环:没有次数的说明,一般直接while循环
程序:完善(菜单--à提示--à参与)
流程:
这里的价格用float型(两位小数)
分析全局变量
这里用户名需要程序开始和结束都要显示出来.
系统的随机数在程序中需要比较,这个随机数也是全局变量float
注意:
(1)编程中,常遇到循环里面满足某一条件退出循环,退出循环后根据循环中发生的不同情况进行不同的逻辑处理,这种编程一般采用标志位的方法处理.
方法:
1\先设置一个标志位boolean ,初始值为false
2\满足某一条件时,退出循环则为true
3\根据标志位的true和false,来输出不同的信息.
(2)如果只是用户参与使用回车或者某个信息,但这个信息不做无意义的存储.
Scanner.nextLine() 语句即可
import java.util.Scanner;
public class Youxi {
public static void main(String[] args) {
//定义全局变量,username玩家参与名字,plan_price系统产生的价格
String username;
//float类型赋初值尾部一定要加上f,不然小数会报错
float plan_price=0.00f;
//定义菜单
System.out.println("----------------------------");
System.out.println(" 游戏: 幸运价格猜猜猜");
System.out.println(" 作者:XXXXX");
System.out.println(" 版本:v1.0");
System.out.println("----------------------------");
//显示欢迎界面,当用户敲入回车,进入用户的用户名输入
//这里的回车需要Scanner
Scanner scanner = new Scanner(System.in);
//先接收回车,在这步用户敲任何数据都不接收,这句没有接收,原因用户敲任何内容不需要保存
scanner.nextLine();
//敲入回车后,才开始进行游戏的进行,输入用户名
System.out.println("请输入用户名字");
//这里username全局变量是需要接收的
username=scanner.next();
//接收完之后
System.out.println(username+",欢迎进入游戏空间,现在请选择的价格猜猜猜商品的类别");
//输出类别
System.out.println("***********************");
System.out.println("1------家电(1000-2000)");
System.out.println("2------文具(1-100)");
System.out.println("***********************");
//接收用户输入1或2,防止用户输入其它内容报错,这里不用nextInt,还使用next
String user_choice=scanner.next();
//用户的user_choice内容输入后,只有1和2进行响应,其它天马行空的价格
//条件语句有确定值用switch
switch(user_choice){
case "1":
plan_price=Math.round(Math.random()*1000+1000);
break;
case "2":
plan_price=Math.round(Math.random()*99+1);
break;
default:
plan_price=Math.round(Math.random()*10000);
}
//做用户输入价格的提示
System.out.println("请用户输入猜猜猜的价格:");
//用户猜数字,输入价格和判断是重复的步骤,while猜对,还有一个变量用户输入价格
float user_price=scanner.nextFloat();
//设定一个最终输出不同信息的标志位
boolean flag=false;
//考虑一下,用户在while没有出来过,做一个规定,如果用户输入0或者负数,直接退出猜价格
while(!(user_price==plan_price)){
//进入到循环中,如果用户输入0或者负数,直接退出循环
//这里的user_price是一个区间段,只能用if
if(user_price<=0) {
//没有完成,放弃了,flag=true
flag=true;
//退出循环程序使用break
break;
}
//进入循环的条件没有等于,else中的意义:除了大于就是小于
if(user_price>plan_price){
System.out.println("猜大了");
}else{
System.out.println("猜小了");
}
//循环继续猜
user_price=scanner.nextFloat();
}
//最后输出用户到底是猜出来的还是没有猜出来的,猜出来的输出“你真聪明”,猜不出来“再接再励”。
if(flag){
System.out.println("再接再励");
}else{
System.out.println("你真聪明");
}
//程序最后往往会留下一些建议内容
System.out.println("对本系统的使用有什么宝贵意见,可以联系作者或者email");
}
}