1.数据输入
1.1 数据输入
1.2 Scanner使用的基本步骤
-
导包
import java.util.Scanner;//导包的动作必须出现在类定义的上边
-
创建对象
Scanner sc=new Scanner(System.in);//这个格式里面,只有sc是变量名可以变,其他都不允许变。
-
接收数据
int i=sc.nextInt();//这个格式里面,只有i是变量名,可以变,其他的都不允许变。
案例1:三个和尚
需求:一个寺庙里住着三个和尚,他们的身高必须经过测量得出(即身高未知),请用程序员实现获取这三个和尚的最高身高。
import java.util.Scanner;//导包
public class ThreeMonks {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);//创建对象
System.out.println("请输入和尚1的身高值:");
int height1=sc.nextInt();
System.out.println("请输入和尚2的身高值:");
int height2=sc.nextInt();
System.out.println("请输入和尚3的身高值:");
int height3=sc.nextInt();
int tempHeight=height1>height2?height1 :height2 ;
int maxHeight=tempHeight >height3 ?tempHeight :height3 ;
System.out.println("三个和尚最高身高为:"+maxHeight +"cm");
}
}
2.分支语句
2.1流程控制
分类:
- 顺序结构
- 分支结构(if,switch)
- 循环结构(for,while,do…while)
2.2顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序依次执行,程序中大多数的代码都是这样执行的。
2.3 if语句
格式1:
if(关系表达式){
语句体;
}
格式2:
if(关系表达式){
语句体1;
}else{
语句体2;
}
案例2:奇偶数
需求:任意给出一个整数,请用程序实现判断该整数是奇数还是偶数,并在控制台输出结果。
import java.util.Scanner;//导包
public class OddAndEvenNumber {
public static void main(String[] args){
//创建对象
Scanner sc=new Scanner(System.in);
System.out.println("请输入数据:");
//接收数据
int num=sc.nextInt();
if(num%2==0){
System.out.println(num+"是偶数");
}
else{
System.out.println(num+"是奇数");
}
}
}
格式3:
if(关系表达式1){
语句体1;
}else if(关系表达式2){
语句体2;
}
……
else{
语句体n+1;
}
案例3:考试奖励
需求:小明快要期末考试了,小明爸爸对他说,会根据他不同的考试成绩,送给他不同的礼物,假如你可以控制小明的得分,请用程序实现小明到底会获得什么样的礼物,并在控制台输出。
95-100:一辆新自行车
90-94分:去游乐园玩
80-89分:一个变形金刚
80分以下:揍一顿
import java.util.Scanner;//导包
public class ExamReward {
public static void main(String[] args){
//创建数据
Scanner sc=new Scanner(System.in);
System.out.println("请输入小明的得分:");
//接收数据
int score=sc.nextInt();
System.out.println("小明获得的奖励是:");
if(score>100||score<0){
System.out.println("输入数据有误!!!");
}else if(score>=95&&score<=100){
System.out.println("一辆自行车");
}else if(score>=90&&score<=94){
System.out.println("去游乐园玩");
}
else if(score>=80&&score<=89){
System.out.println("变形金刚");
}else{
System.out.println("揍一顿!");
}
}
}
数据测试
测试:正确数据,错误数据,边界数据
2.4 switch语句
格式:
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
……
default:
语句体n+1;
[break;]
}
执行流程:
- 计算表达式的值
- 依次和case后面的值进行比较,如果有对应的值,就会执行相应的语句,执行过程中遇到break结束。
- 如果所有的case后面的值和表达式的值都不匹配,就会执行default里面的语句体,然后程序结束掉。
import java.util.Scanner;
public class SwitchDemo {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int week=sc.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;
}
}
}
案例4:春夏秋冬
需求:一年有12个月,分属春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出结果。
春:3、4、5
夏:6、7、8
秋:9、10、11
冬:1、2、12
import java.util.Scanner;
public class Season {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
System.out.println("请输入月份:");
int season=sc.nextInt();
switch(season){
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;
case 8:
System.out.println("夏季");
break;
case 9:
System.out.println("秋季");
break;
case 10:
System.out.println("秋季");
break;
case 11:
System.out.println("秋季");
break;
case 12:
System.out.println("冬季");
break;
default:
System.out.println("输入了错误的月份!!!");
break;
}
}
}
//case穿透
switch(season){
case 1:
case 2:
case 12:
System.out.println("冬季");
break;
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;
default:
System.out.println("输入了错误的月份!!!");
break;
}
注意事项:在switch语句中,如果case控制的语句体后面不写break,将会出现穿透现象,在不判断下一个case值得情况下,向下运行,直到遇到break,或者整体switch语句结束。
3.循环语句
3.1循环结构
特征:
- 重复做某件事情
- 具有明确的开始和停止标志
循环结构的组成:
- 初始化语句:用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样。
- 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去。
- 循环体语句:用于表示循环反复执行的内容,简单说就是循环反复执行的事情。
- 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去。
循环结构对应的语法:
- 初始化语句:一条或多条语句,这些语句可以完成一些初始化操作。
- 条件判断语句:这里使用一个结果值为boolean类型的表达式,这个表达式能决定是否执行循环体,如a<3。
- 循环语句:这里可以是任意语句,这些语句将反复执行。
- 条件控制语句:这里通常是使用一条语句来改变变量的值,从而达到控制循环是否继续向下执行的效果,常见i++,i--这样的操作。
3.2 for循环语句
//格式
for(初始化语句;条件判断语句;条件控制语句){
循环体语句;
}
案例5:输出数据
需求:在控制台输出1-5和5-1的数据
public class PrintNumber {
public static void main(String[] args){
for(int i=1;i<=5;i++){
System.out.println(i);
}
for(int j=5;j>=1;j--){
System.out.println(j);
}
}
}
案例6:求和
需求:求1-5之间的数据和,并把求和结果在控制台输出。
public class Summation {
public static void main(String[] args){
int sum=0;
for(int i=1;i<=5;i++){
sum+=i;
}
System.out.println("1~5之间的数据和为:"+sum);
}
}
案例7:求偶数和
需求:求1-100之间的偶数和,并把求和结果在控制台输出。
//求1~100偶数和
int sum=0;
for(int j=1;j<=100;j++){
if(j%2==0){
sum+=j;
}
}
System.out.println("1~100之间的偶数和为:"+sum);
案例8:水仙花数
需求:在控制台输出所有的水仙花数。
水仙花数:
- 是一个三位数
- 水仙花数的个位、十位、百位的数字立方和等于原数。
public class DaffodilsNumber {
public static void main(String[] args){
System.out.println("水仙花数有;");
for(int i=100;i<=999;i++){
int a=i%10;
int b=i/10%10;
int c=i/100%10;
if(a*a*a+b*b*b+c*c*c==i){
System.out.println(i);
}
}
}
}
案例9:统计水仙花个数
需求:统计水仙花数的个数,并输出水仙花个数。
//统计水仙花数的个数
int count=0;
for(int i=100;i<=999;i++){
int a=i%10;
int b=i/10%10;
int c=i/100%10;
if(a*a*a+b*b*b+c*c*c==i){
count++;
}
}
System.out.println("水仙花数个数有:"+count+"个");
3.3while循环语句
//基本格式
while(条件判断语句){
循环体语句;
}
//完整格式
初始化语句;
while(条件判断语句){
循环体语句;
条件控制语句;
}
案例10:珠穆朗玛峰
需求:世界上最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
public class Qomolangma {
public static void main(String[] args){
double height=0.1;
int count=0;
while(height<=8844430){
height*=2;
count++;
}
System.out.println("折叠"+count+"次");
}
}
3.4 do …while循环语句
//基本格式
do{
循环体语句;
}while(条件判断语句);
//完整格式
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
3.5三种循环的区别
- for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
- do……while循环先执行依次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
3.6 for和while的区别
- 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能被再次访问到了
- 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用。
4.跳转控制语句
continue:用在循环中,基于条件控制,跳过某次循环体内容的执行,继续下一次的执行。
break:用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环。
5.循环嵌套
//在控制台输出一天的24小时,每小时60分钟
public class HourMinute {
public static void main(String[] args){
for(int hour=0;hour<24;hour++){
for( int minute=0;minute<60;minute++){
System.out.println(hour+"时"+minute+"分");
}
}
}
}
6.Random
Random的作用:用于获取一个随机数
使用步骤:
-
导包
import java.util.Random;//导包的动作必须出现在类定义的上面
-
创建对象
Random r=new Random();//这个格式里面,只有r是变量名可以变,其他的都不允许变
-
获取随机数
int number=r.nextInt(10);//获取数据的范围:[0,10),包括0不包括10; //这个格式里面,只有number是变量名可以变,数字10可以变,其他的都不允许变
//获取0~10内的一个随机数 import java.util.Random;//导包 public class RandomDemo { public static void main(String[] args){ //创建对象 Random r=new Random(); //获取随机数 int number=r.nextInt(10); System.out.println("Number:"+number); } } //获取10个随机数 import java.util.Random;//导包 public class RandomDemo { public static void main(String[] args){ //创建对象 Random r=new Random(); for(int i=1;i<=10;i++){ //获取随机数 int number=r.nextInt(10); System.out.println("Number:"+number); } } } //获取一个1~100之间的随机数 import java.util.Random;//导包 public class RandomDemo { public static void main(String[] args){ //创建对象 Random r=new Random(); //获取随机数 int number=r.nextInt(100)+1; System.out.println("Number:"+number); } }
案例11:猜数字
需求:程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?
当猜错的时候根据不同情况给出相应的提示:
- 如果猜的数字比真实数字大,提示你猜的数据大了;
- 如果猜的数字比真实数字小,提示你猜的数据小了;
- 如果猜的数字与真实数字相等,提示恭喜你答对了;
import java.util.Scanner;//导包
import java.util.Random;
public class GuessNumber {
public static void main(String[] args){
//创建对象
Scanner sc=new Scanner(System.in);
Random r=new Random();
int number=r.nextInt(100)+1;//获取数字
System.out.println("猜猜我是谁?(1~100)");
int getNumber=sc.nextInt();
while(getNumber!=number) {
if (getNumber > number) {
System.out.println("你猜大啦!");
getNumber = sc.nextInt();
} else if (getNumber<number) {
System.out.println("你猜小啦!");
getNumber = sc.nextInt();
}
}
System.out.println("恭喜你猜中啦!");
}
}