「这是我参与11月更文挑战的第12天,活动详情查看:2021最后一次更文挑战」。
程序流程控制
顺序结构
分支结构(C中的选择结构)
循环结构
从键盘获取值
需要用到Scanner类
具体实现步骤:
-
导包:import java.util.Scanner
-
Scanner实例化(类似于造了个对象):Scanner scan = new Scanner(System.in);//scan是变量名可以换,System.in从系统导入
-
调用Scanner类的相关方法3字符串chul(变量名.nextXxx),来获取指定类型的变量
Xxx是变量类型,例如Float,除了字符串(直接用next)
注意:需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的类型不匹配(可以自动转换即可,不一定完全一样)时,会报异常: InputNisMatchExce导致程序终止。
import java.util.Scanner;//导包
public class ScannerText {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);//造了一个对象
//int num= scan.nextInt();//键盘输入int型
System.out.println("请输入你的名字");
String name= scan.next();
System.out.println("请输入你的年龄");
int age= scan.nextInt();//注意Int的I大写//不能输入double型
System.out.println("请输入你的体重");
double weight=scan.nextDouble();//可以填整型数据,会自动转化为double型
boolean yesno= scan.nextBoolean();//输入一个boolean型变量,注意只能是true和false
//对于char型的获取,Scanner没有提供相关的方法,只能够获取一个字符串(用字符串获取char)
System.out.println("性别");
String gender=scan.next();
char genderChar=gender.charAt(0);//意义是获取字符串的第几个的字符,注意和C中一样,从0开始,0取得是第一个字符
}
}
顺序结构
程序从上到下逐行地执行,中间没有任何判断和跳转。
分支结构
if—else
if(表达式){//表达式结果是true进去执行
代码块
}
if(表达式){//二选一
代码块
}else{
代码块
}
if(表达式){//一旦进入了一个if中执行后直接跳出结构,
代码块
}else if(){//多选一,只执行一次
代码块
}
...
else{
代码块
}
puhblic class ifelseText{//用if---else进行三个数比较大小
public static void main(String[] args){
int x=10,y=20,z=30,max;
if(x>y&&x>z){
max=x;
}else if(y>x&&y>z){
max=y;
}else
max=z;
System.out.println(max);
}
}
例题一(考试奖励)
import java.util.Scanner;
/**小鹏参加Java考试,他和父亲岳不群达成承诺:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断
*/
/**
* 针对于条件表达式:
* 如果多个条件表达式之间是“互斥"关系(或没有交集的关系),可以交换顺序
* 如果多个条件表达式之间有交集,不能交换(必须要按特定顺序)
* 如果多个条件表达式之间有包含关系,大的在下面,小的在上面(保证每一个都有机会执行)
*/
public class IfText {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
System.out.println("输入成绩");
int grade= scan.nextInt();//score也是成绩
if(grade<60){//if---else if---最后可以没有else(else结构可选)
System.out.println("什么奖励也没有");
}else if(grade<80&&grade>=60){
System.out.println("奖励一个pad");
}else if(grade<99){
System.out.println("奖励一个iphone");
}else if(grade==100){
System.out.println("奖励一个BWM");
}else{
System.out.println("什么奖励也没有");
}
}
}
还有一些有趣的例题在其他文章里: 链接:有趣例题
switch—case
switch(表达式){//根据switch表达式中的值,依次匹配各个case中的常量。
//一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾为止结束。
case 常量1://break,跳出switch-case结构
语句1;
//break;
case 常量2://常量可以是字符串常量、与String类型的表达式匹配
语句2;
//break;
……
case 常量n:
语句n;
//break;
default://default类似于else,是可选的(可以没有),并且位置灵活
语句;
//break;
}
switch中的表达式只能是如下的六种数据类型之一:byte、short、int、char、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
例题一(大小写转换,键盘输入char类型)
import java.util.Scanner;
/**
* 使用switch把小写字母转化成大写只有(a、b、c、d、e),其他输出other
*/
public class SwitchText {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
String at= scan.next();
char art=at.charAt(0);
switch(art){
case 'a'://注意是字符a ,不能直接写a
System.out.println("A");//写art-32输出出来是数字不是字母
break;
case 'b':
System.out.println("B");
break;
case 'c':
System.out.println("C");
break;
case 'd':
System.out.println("D");
break;
case 'e':
System.out.println("E");
break;
default:
System.out.println("other");
}
}
}
例题二(是否及格、复杂的结构转化(使用运算))
/**
* switch结构写出大于60分及格,小于不及格
*/
public class SwitchTwo {
public static void main(String[] args){
int score=80;
switch(score/60){//麻烦一点可以除以10,注意掌握这种思想
case 0://也可以先判断,赋变量不同的值,在switch---case
System.out.println("不及格");
break;
case 1:
System.out.println("及格");
break;
}
}
}
/**
* 多个case可以合并(不同case的执行语句相同时)
* case 0:
* case 1:
* case 2
* case 3:
* case 4:
* System.out.println("及格");
* break;
*/
例题三(计算天数(无break的巧用))
import java.util.Scanner;
/**
* 从键盘上输入2019年的“month”和"day”,要求通过程序输出输入的日期为2019年的第几天。
*/
public class MouthDayText {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int year= scan.nextInt(), mouth=scan.nextInt(),day= scan.nextInt();
int two;
if(year%100!=0){
if(year%400==0) {
System.out.println("是闰年");
two=29;
}
else {
System.out.println("不是闰年");
two=28;
}
}else {
if (year % 4 == 0){
System.out.println("是闰年");
two=29;
}
else {
System.out.println("不是闰年");
two=28;
}
}
int count=0;
switch (mouth){//注意1月不能直接加31,因为还没有过完,只需要加天数即可(5月加前四个月的天数在加五月天数)
case 12:
count+=30;//巧用break,***注意要倒着来这样之前的月份才能加上
case 11:
count+=31;
case 10:
count+=30;
case 9:
count+=31;
case 8:
count+=31;
case 7:
count+=30;
case 6:
count+=31;
case 5:
count+=30;
case 4:
count+=31;
case 3:
count+=two;//也可以把是否是闰年的判断嵌套在 case 3中
case 2:
count+=31;
}
System.out.println(count+day);
}
}
if—else和switch case关系
switch case执行效率较高能用switch case时且分支不多尽量用