文章目录
1.用户交互Scanner
- Java提供了一个工具类,可以获取用户输入:java.util.Scanner
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner=new Scanner(System.in);
//CTRL+ALT+V对该行快速根据变量类型自动生成变量.
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
if(scanner.hasNext()){
String str=scanner.next();
System.out.println("输入的内容为:"+str);
}
//用完io类一定要关掉,不关闭会一直占用资源
scanner.close();
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据
-
next():
- 一定要读取到有效字符后才可以结束输入。
- 对输入的有效字符之前遇到的空白,next()方法会自动将其去掉
- 只有输入有小字符后才将其后面输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串。
-
nextLine():
- 以回车为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
- 可以获得空白。
hasNextInt:如果输入的是整数
hasNextFloat:如果输入的是小数
配合if或者循环来限制输入的数类型
//输入多个数字,并求其总和与平均数,每输入一个用回车确认,通过输入非数字结束
Scanner scanner = new Scanner(System.in);
double sum=0;
int m=0;
while (scanner.hasNextDouble()){
double i=scanner.nextDouble();
sum+=i;
m++;
}
System.out.println("总和为:"+sum);
System.out.println("平均数为:"+sum/m);
scanner.close();
2.顺序结构
3.选择结构
if选择结构
单选泽结构:
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String s = scanner.nextLine();
//equals:判断字符串是否相等
if(s.equals("hello")){
System.out.println(s);
//如果是hello则会输出s,不是则跳过执行下一条
}
System.out.println("end");
scanner.close();
双选择结构:if。。。else。。。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩");
int i = scanner.nextInt();
if(i>=60){
System.out.println("及格");
}else {
System.out.println("不及格");
}
scanner.close();
多选择结构:
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩");
int i = scanner.nextInt();
if(i==100){
System.out.println("满分");
}else if (i<100&&i>=90){
System.out.println("优秀");
}else if (i>=80&&i<90){ //使输入更规范更严谨,减少bug
System.out.println("良好");
}else if (i>=70&&i<80){
System.out.println("中等");
}else if (i>=60&&i<70){
System.out.println("及格");
}else if (i>0&&i<60){
System.out.println("不及格");
}else{ //以上满足一个条件就结束,后面的不会执行
System.out.println("输入不规范");
}
scanner.close();
Switch多选择结构
Switch语句中的变量类型可以是:
byte、short、int、char、string(Java SE 7以后)
case标签必须为字符串常亮或字面量
char grade='c';
switch (grade){
case 'a':
System.out.println("优秀");
break; // break跳出循环,如果不加会一直往下运行,直到下一个break
case 'b':
System.out.println("良好");
break;
case 'c': //匹配到此处grade==c,开始往下运行
System.out.println("及格");
break;
case 'd':
System.out.println("不及格");
break; //如果上一个break没加,将会输出 及格 不及格
default:
System.out.println("未知输入");
}
String name="ming";
//JDK7新特性,表达式结果可以是字符串
switch (name){
case "ming":
System.out.println("明");
break;
case "han":
System.out.println("韩");
break;
default:
System.out.println("???");
}
看源码可以了解JDK7是怎么实现Switch中字符串表达式的
打开项目结构:
打开项目编译后的输出路径:
复制需要查看源码的class
放入idea里面
打开即可
可以看出是通过hashCode来实现字符串的比较,比较name的hashCode与case后的hashCode
4.循环结构
while循环
while(布尔表达式){循环内容}
- 只要布尔表达式为true,循环就会一直进行
- 大多数情况会让循环停止下来,需要一个让表达式失效的方式来结束循环
int i=0;
int sum=0;
while (i<100){
i++;
sum+=i;
}
System.out.println(sum);
do…while循环
- while循环不满足条件则不能进入循环
- do…while循环至少会执行一次,先do后while循环
int i=0;
int sum=0;
do{
i++;
sum+=i;
}while (i<100);
System.out.println(sum);
for循环
- for循环是支持迭代的一种通用结构,是最有效、最灵活的循环结构
for(初始值;布尔表达式;更新){代码语句}
//输出0~100的奇数和偶数的和
int oddSum=0;
int evenSum=0;
for (int i = 0; i <= 100; i++) { //可以使用100.for来快捷输出0~100的for循环
if(i%2==0)
evenSum+=i;
else
oddSum+=i;
}
System.out.println("奇数的和:"+oddSum);
System.out.println("偶数的和:"+evenSum);
//输出1~1000中能被5整除的书,每行输出三个
for (int i = 0; i <=1000; i++) {
if(i%5==0)
System.out.print(i+"\t");
if(i%15==0)
System.out.println();
}
打印九九乘法表:
int i;
int j;
for(i=1;i<=9;i++){
for (j=1;j<=i;j++){
System.out.print(j+"*"+i+"="+j*i+"\t\t");
}
System.out.println();
}
打印三角形:
//打印五行的三角形
final int LEVEL=5;//三角形高度
for (int i=1;i<=LEVEL;i++){
for(int j=1;j<=LEVEL-i;j++)
System.out.print(" ");
for (int x=1;x<=2*i-1;x++)
System.out.print("*");
System.out.println();
}
增强for循环
JDK5引入的一种主要用于数组或集合的增强型for循环
int[] numbers={10,20,30,40,50};//定义一个数组
for (int x:numbers){ //遍历数组中的元素
System.out.println(x);
}
//相等于
for (int x=0;x<numbers.length;x++){
System.out.println(numbers[x]);
}
5.break与continue
- break在任何循环语句的的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩下的语句。
- continue用于终止某次循环过程,即跳过循环中未执行的语句,接着进行下一次是否执行循环的判定。
Debug:
设置断点,程序将会在该处停止
点击开始debug
step into:单步执行,遇到子函数就进入并且继续单步执行(进入子函数);
step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。有一点,经过我们简单的调试,在不存在子函数的情况下是和step into效果一样的(越过子函数,但子函数会执行)。
step out:当单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数(跳出子函数)。
当前程序状态: