Day4---学习Java第二弹
2021-07-14
eg1:写一个程序,列出斐波那契数列,小于50
1 class Fibonacci { 2 /*print out the Fibonacci sequence for values < 50 */ 3 public static void main (String [] args){ 4 int lo =1; 5 int hi =1; 6 7 System.out.println(lo); 8 while (hi <50){ 9 System.out.println(hi); 10 hi = lo +hi; //new hi 11 lo= hi -lo; //new lo is (sum -old lo) 12 } 13 } 14 }
斐波那契数列:1,1,2,3,5,8,13,21……
这个例子声明了一个Fibonacci类,并且拥有一个main方法。main的前两行定义了两个局部变量:lo和hi,在这里面,hi是数列的当前项,lo是前一项。
根据流程里面,先定义了前两项为1和1,然后先输出前一项lo=1,下面接着利用while函数,前面标明数列当前项是小于50,控制数列数量。
第一步输出hi=1的当前项,然后走流程hi=lo+hi;当然接着lo不可能一成不变,也需要往下走,lo=hi-lo;这就相当于lo等于这一项的hi。
根据这个流程依次输出,即可得到斐波那契数列。
while 所测试的表达式是一个具有true或者false的布尔表达式
系统标准输出System.out。 out 实际上是System类的一个属性。这个属性还有一个println()的方法,想屏幕输出括号里的内容,并且在内容后加上回车。
系统标准输入是System.in。方法read()接受用户输入的字符,它的返回值的int行数据。
eg2:从键盘输入一个浮点数,然后将该浮点数的整数部分输出
class fudianshu{ public static void main(String[] args) { Scanner reader = new Scanner(System.in); float f ; f = reader.nextFloat(); System.out.println((int)f); } }
输入浮点型的数据,记为f
f = reader.nextFloat();
Java中next()的用法:
首先,next()一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空格键、Tab键或Enter键等结束符,next()方法会自动将其去掉,
只有在输入有效字符之后,next()方法才将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。简单地说,next()查找并返回来自此扫描器的下一个完整标记。
完整标记的前后是与分隔模式匹配的输入信息。
Java中nextLine()与其他next(),nextInt(),nextFloat()的区别
nextInt()读取结果为int类型
nextFloat()读取结果为float类型
next()读取结果为String类型
next Line()读取结果为String类型
next(),nextInt(),nextFloat()看到空格符或回车符都认为读取结束,此时不会读取回车符。
nextLine()只以回车符为结束,并且会读取回车符。
下面来个example
public void logIn(){ Scanner input = new Scanner(System.in); System.out.println("请输入ID:"); int id = input.nextInt(); System.out.println("请输入密码:"); String pass = input.nextLine(); }
这里输入ID之后,按回车键,系统弹出"请输入密码:"后并没有等待控制台输入,而是直接结束了程序。
原因就是当我们输入完ID并且按下回车之后,nextInt()方法只会读取‘123’,而不会读取回车;因此回车符会被留在此处。
当执行到nextLine()方法时,nextLine()方法会读取回车,并且以回车符为结束,因此该方法会在我们输入之前就读取到了上次我们输入的回车符,
于是该方法就认为已经执行完毕,所以我们没有输入的机会。
可以都使用nextLine()方法来读取输入,然后再进行接收数据的类型转换,
eg3:从键盘输入两个整数,计算他们相除的结果并输出
class zhengshuxiangchu { public static void main(String[] args) { int a; int b; float c; Scanner reader = new Scanner(System.in); System.out.println("请输入第一个数字"); a = reader.nextInt(); System.out.println("请输入第二个数字"); b = reader.nextInt(); c = (float)a/b; System.out.println("结果是:"+c); } }
定义两个变量,分别用于存储学生的语文成绩和数学成绩,通过程序将这两个变量的值进行交换,输出变量之前的值和交换后变量中的值。
添加断点,观察变量值的交换过程
-
import java.util.Scanner; public class chengjijiaohuan { public static void main(String[] args) { // TODO Auto-generated method stub Scanner cj = new Scanner(System.in); System.out.println("请输入数学成绩"); int SxChengji = cj.nextInt(); System.out.println("请输入语文成绩"); int YwChengji = cj.nextInt(); System.out.println("交换前的数学分数是:"+SxChengji+"语文成绩是:"+YwChengji); YwChengji = SxChengji+YwChengji; SxChengji = YwChengji - SxChengji; YwChengji = YwChengji - SxChengji; System.out.println("交换后的数学分数是:"+SxChengji+"语文成绩是:"+YwChengji); } }
-
添加程序断点,以Debug模式运行程序。点击右上角“Debug”视图按钮,进入 Debug 视图。
- 点击单步执行按钮,让程序执行完 13行代码,进入 14行代码
-
再次观察变量视图,查看数学成绩取值以及交换变量取值
-
观察数学成绩取值和交换变量的取值已经一样。让程序执行完14行代码,进入 15行代码。
-
再次观察变量视图,查看数学成绩取值。
-
通过观察,可以发现此时数学成绩已经由原来的80分被修改为90分,语文成绩和数学成绩已经相同,点击单步执行,让程序执行完第 15行代码
-
此时准备执行第 16行代码,再次观察变量视图
-
通过观察,此时语文成绩变量与数学成绩变量已经完成值的交换。
- ----------------------------------------------------------------------------------------------------------------------
逻辑运算符中的逻辑与和简洁与的区别是什么?
简洁运算符可能只需要计算左边的表达式而不用计算右边的表达式,而逻辑运算符必须计算完左右两个表达式才行。
逻辑运算符和位运算符的区别是什么?
逻辑运算符的操作数都是Boolean的数据,位运算符的操作数只能是整型或者字符型数据
Scanner cannot be resolved to a type报错情况
解决方法
Scanner类。使用前需要将其导入。
也就是说在代码的最前端加入
import java.util.Scanner;
明天继续学习