为什么要使用键盘录入数据
(1)为了让程序的数据更符合开发的数据
(2)让程序更灵活一点
如何实现键盘录入呢?
格式:
(1)导包
import java.util.Scanner;
位置:
在class上面。
(2)创建键盘录入对象
格式:
Scanner sc = new Scanner(System.in);
(3)通过对象获取数据
格式:
int x = sc.nextInt();
案例演示:
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
int a,b,c,max,max2;
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数:");
a=sc.nextInt();
System.out.println("请输入第二个数:");
b=sc.nextInt();
System.out.println("请输入第三个数:");
c=sc.nextInt();
max=a>b?a:b;
max2=max>c?max:c;
System.out.println("最大的数是:"+max2);
}
}
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
int a,b;
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数:");
a=sc.nextInt();
System.out.println("请输入第二个数:");
b=sc.nextInt();
String c=a==b?"相等":"不相等";
System.out.println(c);
}
}
是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。总的来说:写在前面的先执行,写在后面的后执行
也被称为分支结构。选择结构有特定的语法规则,代码要执行具体的逻辑运算进行判断,逻辑运算的结果有两个,所以产生选择,按照不同的选择执行不同的代码。
if(比较表达式或者是boolean类型的值) {
语句体;
}
执行流程:
先计算比较表达式的值,看其返回值是true还是false。
如果是true,就执行语句体;
如果是false,就不执行语句体;
注意事项:
if(比较表达式) {
语句体1;
}else {
语句体2;
}
注意事项:else后面是没有比较表达式的,只有if后面有。
执行流程:
首先计算比较表达式的值,看其返回值是true还是false。
如果是true,就执行语句体1;
如果是false,就执行语句体2;
案例演示:
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个整数");
int a=sc.nextInt();
System.out.println("请输入第二个整数");
int b=sc.nextInt();
int max;
if(a>b){
max=a;
}else{
max=b;
}
System.out.println("最大值是"+max);
}
}
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
int a,b,c;
Scanner sc=new Scanner(System.in);
System.out.println("请输入第一个数");
a=sc.nextInt();
System.out.println("请输入第二个数");
b=sc.nextInt();
System.out.println("请输入第三个数");
c=sc.nextInt();
int max;
if(a>b){
if(a>c){ //if语句的嵌套使用
max=a;
}else {
max=c;
}
}
else{
if(b>c){
max=b;
}else{
max=c;
}
}
System.out.println("最大值是:"+max);
}
}
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
int a;
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个整数:");
a=sc.nextInt();
if(a%2==0){
System.out.println("这个数是偶数");
}else{
System.out.println("这个数是奇数");
}
}
}
if(比较表达式1) {
语句体1;
}else if(比较表达式2) {
语句体2;
}else if(比较表达式3) {
语句体3;
}
...
else {
语句体n+1;
}
执行流程:
首先计算比较表达式1看其返回值是true还是false,
如果是true,就执行语句体1,if语句结束。
如果是false,接着计算比较表达式2看其返回值是true还是false,
如果是true,就执行语句体2,if语句结束。
如果是false,接着计算比较表达式3看其返回值是true还是false,
…
如果都是false,就执行语句体n+1。
注意事项: 当只要有一个条件满足时,if语句结束。else是可以省略,但是不建议省略。
案例演示
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
int a;
Scanner sc=new Scanner(System.in);
System.out.println("请输入成绩:");
a=sc.nextInt();
if(a>=90&&a<=100){
System.out.println("成绩等级为:优秀!");
}else if(a>=80&&a<=89){
System.out.println("成绩等级为:良好!");
}else if(a>=70&&a<=79){
System.out.println("成绩等级为:中等!");
}else if(a>=60&&a<=69){
System.out.println("成绩等级为:及格!");
}else if(a>=50&&a<=59){
System.out.println("成绩等级为:不及格!");
}else{
System.out.println("成绩不合法!");
}
}
}
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
int x,y;
Scanner sc=new Scanner(System.in);
System.out.println("请输入x的值:");
x=sc.nextInt();
if(x>=3){
y=2*x+1;
}else if(x>=-1&&x<3){
y=2*x;
}else{
y=2*x-1;
}
System.out.println("y的值为:"+y);
}
}
switch(表达式){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
case 值3:
语句体3;
break;
....
default:
语句体n+1;
break;
}
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
int a;
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个0-4的整数获奖码以查看奖励");
a=sc.nextInt();
switch(a){
case 1:
System.out.println("恭喜获得一台笔记本电脑!");
break;
case 2:
System.out.println("恭喜获得一部手机!");
break;
case 3:
System.out.println("恭喜获得100元红包!");
break;
case 4:
System.out.println("恭喜获得5元优惠券!");
break;
default:
System.out.println("输入不合法!");
break;
}
}
}
注意事项:
(1)switch所支持的数据类型:byte,short,int,char
JDK5以后可以是枚举类型
JDK7以后可以是String
(2)case后面跟的是要和表达式进行比较的值,必须是常量,而且多个case后面的值不能相同。
(3)语句体部分可以是一条或多条语句
(4)break表示中断,结束的意思,可以结束整个switch语句,如果忘了写一个break,则会出现"case穿透"现象:会多执行下一个case的语句体。
(5)default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似,default语句位置不一定放在最后,放在哪都可以。default可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
(6)switch语句的结束条件
1.遇到break就结束了
2.执行到末尾就结束了
面试题:
byte类型数据可以作为switch的表达式吗? 可以
long类型数据可以作为switch的表达式吗? 不可以
String类型数据可以作为switch的表达式吗? JDK7以后可以
看程序写结果:
int x = 2;
int y = 3;
switch(x){
case 2:
y++;
case 3:
y++;
case 4:
y++;
break;
default:
y++;
break;
}
System.out.println("y="+y);
因为case 2和case 3后面都没写break;因此出现了"case穿透"现象,所以y自增了三次。
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args) {
int x;
Scanner sc=new Scanner(System.in);
System.out.println("请输入月份(1-12的整数):");
x=sc.nextInt();
if(x==3||x==4||x==5){
System.out.println("春季");
}else if(x==6||x==7||x==8){
System.out.println("夏季");
}else if(x==9||x==10||x==11){
System.out.println("秋季");
}else if(x==12||x==1||x==2){
System.out.println("冬季");
}else{
System.out.println("输入不合法!");
}
}
}
import java.util.Scanner;
class ScannerDemo1{
public static void main(String[] args){
int x;
Scanner sc=new Scanner(System.in);
System.out.println("请输入月份(1-12的整数):");
x=sc.nextInt();
switch(x){
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;
}
}
}
在做判断的时候,我们有两种选择,if语句和switch语句,那么,我们到底该如何选择使用那种语句呢?
if语句使用场景:
(1)针对结果是boolean类型的判断
(2)针对一个范围的判断
(3)针对几个常量值的判断
switch语句使用场景:
(1)针对几个常量值的判断
循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。它由循环体中的条件,判断继续执行某个功能还是退出循环。
for(初始化表达式语句;判断条件语句;控制条件语句) {
循环体语句;
}
public class ForDemo1 {
public static void main(String[] args) {
int sum=0;
for(int i=1;i<=10;i++){
sum+=i;
}
System.out.println(sum);
}
}
public class ForDemo2 {
public static void main(String[] args) {
int sum1=0;
int sum2=0;
for(int i=1;i<=100;i++){
if(i%2==0)sum1+=i;
else sum2+=i;
}
System.out.println("偶数和是"+sum1+",奇数和是"+sum2);
}
}
3.在控制台输出所有的”水仙花数”,并统计其个数
所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
public class ForDemo3 {
public static void main(String[] args) {
int a,b,c,count=0;
System.out.println("水仙花数:");
for(int i=100;i<=999;i++){
a=i%10;
b=i/10%10;
c=i/100%10;
if(a*a*a+b*b*b+c*c*c==i) {
System.out.println(i);
count++;
}
}
System.out.println("水仙花数一共有:"+count+"个");
}
}
初始化条件语句;
while(判断条件语句) {
循环体语句;
控制条件语句;
}
public class WhileDemo {
public static void main(String[] args) {
int i=1;
int sum=0;
while(i<=10){
sum+=i;
i++;
}
System.out.println(sum);
}
}
初始化条件语句;
do {
循环体语句;
控制条件语句;
}while(判断条件语句);//注意:有分号
执行流程:
(1)执行初始化条件语句;
(2)执行循环体语句;
(3)执行控制条件语句;
(4)执行判断条件语句,看其返回值是true还是false
如果是true,就继续执行
如果是false,就结束循环
(5)回到(2)继续。
案例演示
请在控制台输出数据1-10
public class DoWhileDemo {
public static void main(String[] args) {
int i=1;
do{
System.out.println(i);
i++;
}while(i<=10);
}
}
while(true){...}
for(;;){...}
案例演示
public class Demo{
public static void main(String[] args) {
for(int i=0;i<4;i++){
for(int j=0;j<5;j++){
System.out.print("*");//注意println和print的区别
}
System.out.println();//仅仅输出一个换行
}
}
}
public class Demo{
public static void main(String[] args) {
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"x"+j+"="+i*j+" ");
}
System.out.println();
}
}
}
public class Demo {
public static void main(String[] args) {
for (int i = 1; i < 100; i++) {
System.out.println(i);
if(i==10){
break;
}
}
}
}
方法一:
public class Demo {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
System.out.println("内层循环"+j);
if(j==2){
break;//(1)
}
}
System.out.println("跳出一次内层循环");
if(i==1){
break;//(2)
}
}
System.out.println("结束外层循环");
}
}
结果
(1)处的break跳出的是内循环,(2)处的break跳出的是外循环。也就是说,一个break只能跳出一层循环。该方法用了两个break才跳出双层循环,方法二则用一个break达到退出双层循环的效果:
方法二:
public class Demo {
public static void main(String[] args) {
one:for (int i = 0; i < 10; i++) { //利用前面提到的用标签起别名的方法
two:for (int j = 0; j < 10; j++) {
System.out.println("内层循环"+j);
if(j==2){
break one;//break + 别名 直接退出了外层循环
}
}
System.out.println("跳出一次内层循环");
if(i==1){
break;
}
}
System.out.println("结束外层循环");
}
}
public class Demo {
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
if(i%2==0){
continue;
}
System.out.println(i);
}
}
}
结果
解释:当 i 对2取余数为0时,即为偶数时,跳过这一次循环,进入下一次循环,从而跳过偶数的输出,只输出了奇数。
for(int x=1; x<=10; x++) {
if(x%3==0) {
//在此处填写代码
}
System.out.println("Hello World");
}
答:
(1)break;
(2)continue;
(3)System.out.println(“Hello World”);