java.util.Scanner是Java5的新特性,用来获取用户输入
Scanner s = new Scanner(System.in); // 获取输入的字符串 next(); nextLine(); // 判断是否还有输入的数据 hasNext(); hasNextLine();
// 创建一个扫描器对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); //hello world System.out.println("输入数据:"); // 判断用户有没有输入数据 if (scanner.hasNext()){ // 这里可以去掉if判断 // 使用next方法接收 String str = scanner.next(); System.out.println("输出内容:"+str); // hello // 使用nextLine方法接收 String strLine = scanner.nextLine(); System.out.println("输出内容:"+strLine); //world } // 凡是IO流的类如果不关闭会一直占用资源 scanner.close();
Scanner scanner = new Scanner(System.in); int i = 0; float f = 0.0f; // 需要输入两次 if(scanner.hasNextInt()){ i = scanner.nextInt(); System.out.println("输出内容:"+ i); } if(scanner.hasNextFloat()){ i = scanner.nextFloat(); System.out.println("输出内容:"+ f); } scanner.close();
案例
// 输入多个数字,并求和与平均数,每输入一个数字回车确认,通过输入非数字执行结果 // 创建一个扫描器对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); System.out.println("请输入:"); double sum = 0; int n = 0; // 判断用户有没有输入数字 while (scanner.hasNextDouble()){ n++; // 使用nextInt方法接收 int i = scanner.nextInt(); sum = sum + i; } System.out.println("输出总和:"+sum); // double aver = sum/n; // System.out.println("输出内容:"+ aver); System.out.println("输出内容:"+ (sum/n)); // 凡是IO流的类如果不关闭会一直占用资源 scanner.close();
除非特别指明,否则由上往下依次执行
if(布尔表达式){ // 为true则执行 // s.equals("hello")判断字符串s是否等于hello }
if(布尔表达式){ // 为true则执行 }else{ // 为false则执行 }
if(布尔表达式1){ // 表达式1为true则执行 }else if(布尔表达式2){ // 表达式2为true则执行 }else if(布尔表达式3){ // 表达式3为true则执行 }else if(布尔表达式4){ // 表达式4为true则执行 }else{ // 表达式都为false执行 }
if(布尔表达式1){ if(布尔表达式2){ } }
switch(expression){ case value1 : // 语句 break; // 可选 case value2 : // 语句 break; // 可选 case value3 : // 语句 break; // 可选 default : // 可选 // 语句 }
判断表达式expression的值,执行相等的分支(case),都不相等执行default
判断类型可以是byte, short, int, char, String【从Java7开始】
case标签必须为字符串常量或者字面量
如果没有break则把判断成功的分支的下面的分支全部输出【case穿透现象】
反编译:java->class(字节码文件)--反编译(IDEA)-->java。每一个字符串对应一个hashcode
查看class文件内容【用IDEA作为反编译工具】:打开项目文件目录open in explorer,把class文件拷贝过来,在IDEA中打开【不能直接拖进来,无法读取class文件】
好的程序员要学会看源码
while(布尔表达式){ //循环内容 } // 死循环 while(true){ // 等待客户端连接 // 定时检查 // …… }
即使不满足条件,也要求程序执行一次
do { // 代码语句 }while(布尔表达式)
do-while与while的区别:
while先判断后执行,do-while先执行后判断
do-while至少执行循环体一次
for循环语句是支持迭代的一种通用结构,最有效且灵活的循环结构
for(初始化; 布尔表达式; 更新){ // 代码语句 } /* for循环说明: 1.最先执行初始化步骤,可以声明一种类型,蛋壳初始化一个或多个循环控制变量,也可以是空语句 2.检测布尔表达式的值,true,执行循环体,false,终止循环,执行循环体后面的语句 3.执行一次循环后,更新循环控制变量 4.再次检查布尔表达式 */ for(int i=1; i<=100; i++){ System.out.println("i"); }
print和println的区别:
print输出后不换行,在之后无限加
println输出后换行
// 打印99乘法表 for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(i+"*"+j+"="+(i*j)+"\t"); } System.out.println(); }
增强for循环:jdk5引入,用于数组或集合
for (声明语句:表达式){ // 代码 } int[] n = {10,20,30}; for (int x:n){ // 新的局部变量x必须和数据中的元素类型匹配,其作用域限定在循环语句块,其值与此时的数组元素的值相等 // 表达式:要访问的数组名或者返回数组的方法 System.out.println(x); }
break、continue、goto
break:用于强制退出循环,不执行剩余的循环
continue:用于终止某次循环,进入下一次的循环判定
goto:Java中不存在goto,但是可以使用带标签的break和continue来实现
唯一的用处是在循环语句之前
在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,若同标签使用,它们就会中断到存在标签的地方
// 标签:指后面跟一个冒号的标识符,如label: // 质数:大于1的自然数中,除了1和它本身意外不再有其他因数的自然数 int count = 0; // 不建议使用 outer:for (int i = 101; i <= 150; i++) { for (int j = 2; j < i/2; j++) { if (i % j == 0){ continue outer; } } System.out.println(i); }
// 打印三角形 for (int i = 1; i <=5 ; i++) { // 打印三角形左边的直角三角形空白,用空格完成占位 for (int j = 5; j >= i; j--) { System.out.print(" "); } // 下面两个for循环每次打印一个直角三角形 for (int j = 1; j <= i; j++) { System.out.print("*"); } for (int j = 1; j < i; j++) { System.out.print("*"); } // 换行 System.out.println(); }