目录
用户交互Scanner
通过Scanner类来获取用户的输入,实现程序与人的交互。
Scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,
在读取前我们一般需要使用 hasNext()与hasNextLine()判断是否还有输入的数据。
next():
package control;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方法接收:");
//判断用户是否输入字符串
if (scanner.hasNext()){
//使用next方式接收
String str = scanner.next();
System.out.println("输入的内容为:"+str);
}
//属于IO流的类用完就关闭,否则占用资源
scanner.close();
}
}
nextLine():
package control;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方法接收:");
//判断是否有输入
if (scanner.hasNextLine()){
//使用nextLine方法接收
String str = scanner.nextLine(); //程序会等待用户输入完毕
System.out.println("输出的内容为:"+str);
}
scanner.close();
}
}
next()与nextLine()
应用
package control;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
/*输入多个数,求其总和与平均数。
每输入一个数字用回车确认,
通过输入非数字来结束输入并输出执行结果*/
Scanner scanner = new Scanner(System.in);
double sum = 0; //数字总和
int s = 0; //数字个数
//通过循环判断是否还有输入
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
s++; //个数加一
sum = sum + x; //总数累加
System.out.println("你输入了第" +s+ "个数据,当前结果sum="+sum);
}
System.out.println(s + "个数的和为" + sum);
System.out.println(s +"个数的平均数为" + (sum/s));
scanner.close();
}
}
结构
顺序结构
语句与语句之间,框与框之间是按从上到下的顺序进行的
顺序结构是最简单的算法结构
选择结构
if单选择结构
语法:
package control;
import java.util.Scanner;
public class ifDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String s = scanner.nextLine();
//判断字符串是否相等
if(s.equals("Hello")){
System.out.println(s);
}
System.out.println("End");
scanner.close();
}
}
if双选择结构
语法:
package control;
import java.util.Scanner;
public class ifDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score=scanner.nextInt();
if(score>60){
System.out.println("及格");
}else{
System.out.println("不及格");
}
scanner.close();
}
}
if多选择结构
语法:
package control;
import java.util.Scanner;
public class ifDemo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
/*
if语句至多有1个else语句,else语句在所有的else if语句之后
if语句可以有若干个else if语句,它们必须在else语句之前
一旦其中一个else if语句检测为true,其他的else if以及else语句都将跳过执行
*/
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if(score==100){
System.out.println("恭喜满分!");
}else if (score<100 && score>=90){
System.out.println("A级");
}else if (score<90 && score>=80){
System.out.println("B级");
}else if (score<80 && score>=70){
System.out.println("C级");
}else if (score<70 && score>=60){
System.out.println("D级");
}else if (score<60 && score>=0){
System.out.println("不及格");
}else{
System.out.println("成绩不合法");
}
scanner.close();
}
}
嵌套的if结构
语法:
switch多选择结构
switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
语法:
switch的执行流程
switch的穿透现象
public class switchDemo01 {
public static void main(String[] args) {
//匹配一个具体的值
char grade = 'F';
switch (grade){
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
case 'C':
System.out.println("及格");
case 'D':
System.out.println("再接再厉");
default: //可选
System.out.println("未知等级");
}
}
}
运行结果:
1.若char grade = "A";有break
2.若char grade = "B";无break
3.若char grade = "F";无匹配
反编译
循环结构
while循环
语法:
package control;
public class whileDemo01 {
public static void main(String[] args) {
//计算1+2+3+...+100=?
int i = 0;
int sum = 0;
while (i<=100){
sum = sum+i;
i++;
}
System.out.println(sum);
}
}
do...while循环
语法:
package control;
public class dowhileDemo01 {
public static void main(String[] args) {
int i = 0;
int sum = 0;
do {
sum = sum + i;
i++;
}while (i<=100);
System.out.println(sum);
}
}
while和do...while的区别
package control;
public class dowhileDemo02 {
public static void main(String[] args) {
int a = 0;
while (a<0){
System.out.println(a);
a++;
}
System.out.println("--------------");
do {
System.out.println(a);
a++;
}while (a<0);
}
}
for
for循环
语法:
for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
for循环执行的次数是在执行前就确定的。
/*
关于for循环的说明:
最先执行初始化步骤,可声明一个类型,也可初始化一个或多个循环控制变量,也可以是空语句。
然后,检测布尔表达式的值,如果为true,则循环体被执行。如果为false,循环终止,开始执行循环后面的语句
执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。
再次检测布尔表达式,循环执行上面的过程。
*/
for (int i = 0; i < 100; i++) { //通过100.for快速生成
System.out.println(i);
}
for循环的嵌套
嵌套循环的执行特点:
外部循环每执行一次,内部循环会全部执行一轮
拓展
练习
package control;
public class forDemo02 {
public static void main(String[] args) {
//练习1: 计算0到100之间的奇数和、偶数和
int oddSum = 0; //奇数和
int evenSum = 0; //偶数和
for (int i = 0; i <= 100; i++) {
if (i%2!=0){ //奇数
oddSum+=i; //oddSum = oddSum+1;
}else{ //偶数
evenSum+=i;
}
}
System.out.println("奇数和为:"+oddSum);
System.out.println("偶数和为:"+evenSum);
}
}
for循环:
package control;
public class forDemo03 {
public static void main(String[] args) {
//练习2: 用for循环输出1—1000之间能被5整除的数,并且每行输出3个
for (int i = 1;i <= 1000;i++){
if(i%5==0){
System.out.print(i+"\t");
}
if (i%15==0){
System.out.print("\n");
//System.out.println();
}
}
}
}
while循环:
package control;
public class whileDemo03 {
public static void main(String[] args) {
//练习2: 用while循环输出1—1000之间能被5整除的数,并且每行输出3个
int i = 1;
while (i<=1000){
if (i%5==0){
System.out.print(i+"\t");
}
if (i%15==0){
System.out.println();
}
}
}
}
print与println的区别:
print为一行输出
println为换行输出
System.out.println();==System.out.print("\n");
转义字符
\t:空格,相当于tab
\n:换行
package control;
public class forDemo04 {
public static void main(String[] args) {
//打印九九乘法表
for (int j = 1; j <= 9; j++) {
for (int i = 1; i <= j; i++) {
System.out.print(i +"*"+j+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
while循环和for循环
package control;
public class forDemo01 {
public static void main(String[] args) {
int a = 1; //初始条件
while (a<=100){ //条件判断
System.out.println(a); //循环体
a+=2; //迭代 a=a+2
}
System.out.println("while循环结束!");
//初始化 ;条件判断 ;迭代
for (int i = 0; i < 100; i++) { //通过100.for快速生成
System.out.println(i);
}
System.out.println("for循环结束!");
}
}
while和for循环的应用案例
纸张折叠成珠穆朗玛峰的高度
分析:
如何解决?
增强型for循环(java5)
Java5引入了一种主要用于数组或集合的增强型for循环
现在先做了解,之后数组中会重点使用
语法:
package control;
public class forDemo05 {
public static void main(String[] args) {
//定义了一个数组
int[] numbers = {10,20,30,40,50};
//通过元素下标遍历
for (int i = 0;i<5;i++){
System.out.println(numbers[i]);
}
System.out.println("=====================");
//遍历数组的元素
for (int x:numbers){ //增强型for循环
System.out.println(x);
}
}
}
死循环
可以一直执行下去的一种循环,如果没有干涉不会停下来。
死循环的形式
break 、 continue 、 goto关键字
break在任何循环语句的主体部分,均可用break控制循环的流程。
break用于强行退出循环,不执行循环中剩余的语句(也用于switch语句中)
continue语句用在循环语句体中,用于终止某次循环过程。
即跳出循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
break:
package control;
public class breakDemo01 {
public static void main(String[] args) {
int i = 0;
while (i<100){
i++;
System.out.println(i);
if (i==30){
break;
}
}
System.out.println("123");
}
}
continue:
package control;
public class continueDemo01 {
public static void main(String[] args) {
int i = 0;
while (i<50){
i++;
if (i%10==0){
System.out.println();
continue;
}
System.out.print(i+"\t");
}
}
}
注意事项:
标签:
练习
打印一个五行的三角形
package control;
public class lastDemo01 {
public static void main(String[] args) {
//打印三角形 5行
for (int i = 1;i<=5;i++){
for (int j = 5;j>=i;j--){
System.out.print(" ");
}
for (int j = 1; j <= i; j++) {
System.out.print("*");
}
for (int j = 1; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
debug的运用:
打断点 ===> 一步步向下执行
Random随机数
作用:生成随机数
Random生成指定区间的随机数
如何生成1-10之间的随机数?
如何生成65-91之间的随机数?
案例:猜数字游戏
package control;
import java.util.Random;
import java.util.Scanner;
public class endDemo04 {
//猜数字游戏
public static void main(String[] args) {
//1.随机生成一个1-100之间的数据
Random r = new Random();
int luckNumber = r.nextInt(100)+1;
//2.定义一个死循环,让用户不断的猜测数据
Scanner sc = new Scanner(System.in);
while (true){
//提示用户猜测
System.out.println("请输入您猜测的数据:");
int guessNumber = sc.nextInt();
//判断用户猜测数字与幸运数的大小比较
if (guessNumber>luckNumber){
System.out.println("您猜测的数字过大~~");
}else if(guessNumber<luckNumber){
System.out.println("您猜测的数字过小~~");
}else{
System.out.println("恭喜您,猜测成功了~~");
break; //结束死循环
}
}
}
}