Scanner对象
-
通过Scanner类来获取用户输入
基本语法 Scanner s = new Scanner(System.in) -
通过Scanner类的next()和nextline()方法获取输入的字符串,在读取前一般使用hasNext()与hasNextline()判断是否还有输入的数据;
-
next()
- 一定要读取到有效字符才可以结束输入
- next()中不能加空格,以空格作为结尾
-
nextline()
- Enter为结束符
- 可以获得空白
一个输入输出的实例
package com.kong.scanner;
import java.util.Scanner;
//一个计算机实例
public class Domo05 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = 0;
double sum = 0;
System.out.println("请输入数字,用回车隔开,输入非数字结束");
while(scanner.hasNextDouble()) {
double x = scanner.nextDouble();
m++;
sum+=x;
System.out.println("你输入了第"+m+"个数据,当前结果是sum="+sum);
}
System.out.println(m + "个数的和为:" + sum);
System.out.println(m + "个数的平均值为:" + (sum/m));
scanner.close();
}
}
三大结构
-
顺序结构
-
选择结构
-
if选择
-
Switch 从Java SE 7开始 Switch支持字符串String类型了
-
-
循环结构
-
while先判断后执行
-
do…while先执行后判断,保证至少代码执行一次
-
for:输入 100.for 会自动生成for(i=0;i<100;i++)
- for( ; ;)死循环==while()
-
增强型for循环:Java5引入,主要用于数组或集合:for的偷懒方法
package com.kong.struct; public class ForUp { public static void main(String[] args) { //增强的for循环 int [] numbers = {20,30,40,60,50}; for(int x:numbers){ System.out.println(x); } System.out.println("---------------------------"); //等价于 for (int i = 0; i < 5; i++) { System.out.println(numbers[i]); } } }
-
反编译
反编译 java—编译成class文件----反编译(IDEA)
-
找到项目结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jzKcgVbE-1649762534162)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412100104694.png)]
-
选中文件所在目录
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bvQwu3Sk-1649762534165)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412100132057.png)]
-
找到class文件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S424pCAU-1649762534165)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412100320884.png)]
-
在IDEA中打开文件夹
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-C8CdhnCg-1649762534166)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412100443376.png)]
-
把对应的class文件copy过来即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-77P3NEGF-1649762534166)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412100603339.png)]
-
对比内存中的存储方式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pLmXGprN-1649762534166)(C:\Users\孔德宝\AppData\Roaming\Typora\typora-user-images\image-20220412101049002.png)]
print和println
- print输出会换行,println输出不会换行
- \t相当于空格
break和continue
goto(在java中叫标签,用于返回某一步)
package com.kong.struct;
public class Goto {
public static void main(String[] args) {
//打印101-150之间的质数
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.print(i+" ");
}
}
}
练习打印三角形
package com.kong.struct;
public class practice {
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();
}
}
}
方法
-
一个方法只实现一个功能(原子性)
-
main尽量保持简洁干净
-
课后拓展:值传递(Java) 和 引用传递 -------Java都是值传递
-
方法重载(就是在一个类中,有相同函数名称,但形参不同的函数)
-
方法名称必须相同
-
参数列表必须不同(可以是个数,或者类型,排序不同)
-
方法的返回值类型可同可不同
package com.kong.method; public class Domo01 { public static void main(String[] args) { int sum = add(1,2); System.out.println(sum); } //加法 public static int add(int a,int b){ return a+b; } public static double add(double a,double b){ return a+b; } }
-
-
可变参数
- 参数的个数可变
- 从JDK1.5开始,Java支持传递同类型的可变参数给一个方法。
- 在方法声明中,在指定参数类型后加一个省略号(…)
- 一个方法只能指定一个可变参数,它必须是方法的最后一个参数。任何普通的参数必须在它之前声明。
package com.kong.method;
public class Domo03 {
public static void main(String[] args) {
//调用可变参数的方法
printMax(34,4,21,1,5);
printMax(new double[]{1,2,3});
}
public static void printMax(double...numbers){
if(numbers.length == 0){
System.out.println("No pass");
return;
}
double result = numbers[0];
//排序
for (int i = 1; i < numbers.length; i++){
if(numbers[i] > result){
result = numbers[i];
}
}
System.out.println("The max value is " + result);
}
}
-
递归
- 方法调用自己
- 包括两个部分
- 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环
- 递归体:什么时候需要调用自身方法
- 边界条件:边界
- 前阶段
- 返回阶段:n*(n-1)
- java一般使用栈
- 能不用递归就不用递归,小规模计算可以试试
package com.kong.method; public class Domo06 { public static void main(String[] args) { System.out.println(f(5)); } //递归求阶层 5! /* 若n==5 过程如下 return 5*f(4); return 5*4*f(3); return 5*4*3*f(2); return 5*4*3*2*f(1); return 5*4*3*2*1; */ public static int f(int n){ if(n==1){ return 1;//如果n==1跳出循环,否则就一步一步递归(递归头) }else{ return n*f(n-1);//递归体 } } }
- 作业:设计一个计算机,加减乘除
- 写四个方法:加减乘除
- 利用循环+switch进行用户交互
- 传递需要操作的数
- 输出结果
package com.kong.practice; import java.util.Scanner; public class SimpleCalculator { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); double result=0; int x = 0; while(x!=1) { System.out.println("请输入第1个操作数"); double a = scanner.nextDouble(); System.out.println("请输入运算符"); String c = scanner.next(); System.out.println("请输入第2个操作数"); double b = scanner.nextDouble(); switch (c) { case "+": result = add(a, b); break; case "-": result = sub(a, b); break; case "*": result = mul(a, b); break; case "/": result = div(a, b); break; default: System.out.println("输入格式错误"); break; } System.out.println(a + c + b + "=" + result); System.out.println("若结束程序请输入1,否则输入任意数字开始下一轮计算"); x = scanner.nextInt(); } scanner.close(); } //加法 public static double add(double a, double b) { return a+b; } //减法 public static double sub(double a, double b){ return a-b; } //乘法 public static double mul(double a, double b){ return a*b; } //除法 public static double div(double a, double b){ return a/b; } }