目录
2.使用 Scanner 循环读取 N 个数字,并求取其平均值
一、顺序结构
顺序结构非常简单,就是按照代码书写的顺序一行一行的执行
从下例可以看出代码书写的顺序不一致,打印出来的结果也会不一样
public class Test {
public static void main(String[] args) {
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
}
}
public class Test {
public static void main(String[] args) {
System.out.println("bbb");
System.out.println("aaa");
System.out.println("ccc");
}
}
二、分支结构
(一)if语句
1.语法格式一
if(布尔表达式){ // 语句 }
若布尔表达式为真,则执行if中的语句,否则不执行
public class Test {
public static void main(String[] args) {
int score = 95;
if(score >= 90){
System.out.println("奖励去游乐园玩!");
}
}
}
2.语法格式二
if(布尔表达式){ // 语句1 }else{ // 语句2 }
若布尔表达式为真,则执行if中语句,否则执行else中语句
public class Test {
public static void main(String[] args) {
int score = 85;
if(score >= 90){
System.out.println("奖励去游乐园玩!");
}else{
System.out.println("惩罚在家学习!");
}
}
}
我们可能会遇到另一种写法,这里简述一下二者的区别
//第一种
if(布尔表达式){
// 语句1
}else{
// 语句2
}
//第二种
if(布尔表达式){
//语句1
}
//语句2
第一种:
若布尔表达式成立,则只执行语句1;若布尔表达式不成立,则只执行语句2
第二种:
若布尔表达式成立,则执行完语句1还会执行语句2;若布尔表达式不成立,则只执行语句2
3.语法格式三
if(布尔表达式1){ // 语句1 }else if(布尔表达式2){ // 语句2 }else{ // 语句3 }
若表达式1成立,则执行语句1;否则判断表达式2,若表达式2成立,则执行语句2;否则执行语句3
public class Test {
public static void main(String[] args) {
int score = 86;
if(score >= 90){
System.out.println("优秀");
}else if(score >= 70 && score < 90){
System.out.println("中等");
}else if(score >= 60 && score < 70){
System.out.println("及格");
}else if(score >= 0 && score < 60){
System.out.println("不及格");
}else{
System.out.println("数据错误");
}
}
}
(二)switch语句
switch(表达式){ case 常量值1:{ 语句1; [break;] } case 常量值2:{ 语句2; [break;] } ... default:{ 内容都不满足时执行语句; [break;] } }
执行流程:
1. 先计算表达式的值
2. 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
3. 当表达式的值没有与所列项匹配时,执行default
public class Test {
public static void main(String[] args) {
int day = 1;
switch(day){
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后的常量值不可以重复
- switch的括号内只能是以下类型的表达式:
基本类型:byte、char、short、int,注意不能是long、double、float、boolean类型
引用类型:String常量串、枚举类型- break 不要遗漏, 否则会失去 "多分支选择" 的效果
- switch 不能表达复杂的条件
- switch 虽然支持嵌套, 但是很丑,一般不推荐
三、循环结构
(一)while循环
while(循环条件){ 循环语句; }
若循环条件为 true, 则执行循环语句; 否则结束循环
public class Test {
//打印1-10的数字
public static void main(String[] args) {
int num = 1;
while(num <= 10){
System.out.println(num);
num++;
}
}
}
(二)for循环
for(表达式1;布尔表达式2;表达式3){ 表达式4; }
表达式1: 用于初始化循环变量初始值设置,在循环最开始时执行,且只执行一次
表达式2: 循环条件,成立则循环继续,否则循环结束
表达式3: 循环变量更新方式
public class Test {
//打印1-10的数字
public static void main(String[] args) {
for(int i = 1;i <= 10;i++){
System.out.println(i);
}
}
}
for(表达式1; ;表达式3){
表达式4;
}
//此时默认布尔表达式2的位置为true,默认为死循环
(三)do while循环
do{ 循环语句; }while(循环条件);
先执行循环语句, 再判定循环条件,循环条件成立则继续执行,否则循环结束
do while循环很少用到,更推荐使用while循环或for循环
public class Test {
//打印1-10的数字
public static void main(String[] args) {
int i = 1;
do{
System.out.println(i);
i++;
}while(i <= 10);
}
}
(四)break与continue
1.break
结束整个循环
public class Test {
public static void main(String[] args) {
int a = 1;
while(a <= 10){
if(a == 2){
break;
}
System.out.println(a);
a++;
}
}
}
我们这里可以通过调试看一下过程
当a=2时就执行if中的语句,break直接使整个while循环结束
2.continue
跳过本次循环, 立即进入下次循环
public class Test {
public static void main(String[] args) {
int a = 1;
while(a <= 10){
if(a == 2){
continue;
}
System.out.println(a);
a++;
}
}
}
我们也可以通过调试看一下此时已经死循环了
通过调试我们可以看到a的值一直为2,陷入死循环中
四、输入输出
(一)输出到控制台
输出有三种,通过一个代码来更直观的看一下
public class Test {
public static void main(String[] args) {
System.out.println("输出且换行");
System.out.print("输出且不换行");
System.out.printf("%s\n","格式化输出,与C语言一样!");
}
}
(二)从键盘输入
1.使用 Scanner 读取字符串/整数/浮点数
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入姓名:");
String name = scan.nextLine();
System.out.println("请输入年龄:");
int age = scan.nextInt();
System.out.println("请输入体重:");
float weight = scan.nextFloat();
System.out.println("个人信息如下:");
System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"体重:"+weight+"\n");
scan.close(); //要记得关闭调用
}
}
next()与nextLine()有几个区别需要注意一下:
1.next()遇到空格就结束了
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入姓名:");
String name = scan.next();//遇到空格就结束了
System.out.println(name);
}
}
2.nextLine()会读取到在它之前输入之后的回车
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = scan.nextInt();
System.out.println(age);
//上面输完数字后的”回车“被下面读取到了
System.out.println("请输入姓名:");
String name = scan.nextLine();
System.out.println(name);
}
}
解决办法就是想办法使在输入nextLine()前就将回车读取掉
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = scan.nextInt();
System.out.println(age);
scan.nextLine();//用来读取回车
System.out.println("请输入姓名:");
String name = scan.nextLine();
System.out.println(name);
}
}
2.使用 Scanner 循环读取 N 个数字,并求取其平均值
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int sum = 0;
int num = 0;
while(scan.hasNextInt()){
int tmp = scan.nextInt();
sum += tmp;
num++;
}
System.out.println("sum = " + sum);
System.out.println("avg = " + sum / num);
scan.close();
}
}