前言:
本笔记参考于学友:Estella1024 ;本笔记仅做学习与复习使用,不存在刻意抄袭。
------------------------------------------------------------------------------------------------------------
给各位学友强烈推荐《遇见狂神说》他的整套Java学习路线使我获益匪浅!!!
如果你也是狂神的小迷弟,可以加我好友一起探讨学习。
目录
本篇文章,不阐述基础doc,jdk等,我们直接上代码!
Java流程控制
用户交互Scanner
- Java给我们提供了一个工具类Scanner,可以获取用户的输入(java学习基础阶段,开发者与机器的人机交互,今后使用会很少)。
- java.util.Scanner是Java5的新特征,我们通过Scanner类来获取用户的输入。
- 基本语法
Scanner sc = new Scanner(System.in);
- 通过Scanner类的 next()与 nextLine()方法获取用户的字符串,
- 读取前一般用hasNext()与hasNextLine()判断是否还有输入的数据。
package com.example.demo1.demo;
import java.util.Scanner;
/**
* @author liar
*/
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方法接收:");
//判断用户有没有输入字符串
if(scanner.hasNext()){//还有输入
//使用next方式接收
String sstr = scanner.next();
System.out.println("输出的内容为:"+sstr);
}
//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯,用完就关掉
scanner.close();
}
}
其运行结果为:
输入kuangshen 666
根据以上例子可总结:
- 一定要读取到有效字符才可以结束输入
- 对输入有效字符之前遇到的空白,next()方法会将其去掉
- 只有输入有效字符后才将其后面输入的空白作为结束符
- next()不能得到带有空格的字符串
nextLine()
public static void main(String[] args) {
//从键盘接收数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方法接收:");
//判断用户有没有输入字符串
if(scanner.hasNextLine()){//还有输入
//使用next方式接收
String sstr = scanner.nextLine();
System.out.println("输出的内容为:"+sstr);
}
//凡是属于IO流的类如果不关闭会一直占用资源,要养成好习惯,用完就关掉
scanner.close();
}
输入kuangshen 666
根据以上例子可总结:
- 以Enter作为结束符,即返回输入回车之前所有的字符
- nextLine()可以获取空白
这里不再多说Scanner,进入下一个知识点。
循环结构
- while循环
package com.example.demo1.demo;
/**
* @author liar
*/
public class WhileTest {
public static void main(String[] args) {
//使用while计算1+2+3+......+100的结果
//自定义一个i,与while(i < 100)结合使用,其目的是循环100次
int i = 0;
//定义一个count用来保存每次的计算结果
int count = 0;
//循环从i到100,直到i!<100时停止循环
while(i < 100){
//让i自增,现在i的值已经是1了
i++;
//count = count + i 的缩写
count+=i;
}
//输出计算结果
System.out.println("count:"+count);
}
}
我们来看看结果
do while 与while的区别,实质上就是,while先判断,条件成立后才执行代码,而do while无论如何都会先执行代码一次再进行判断。这里不再阐述do while.
- for循环
//(初始化;条件判断;迭代)
for(int i = 0;i <100;i++){
i++;
sum+=i;
}
for(;;){...}//死循环
- 增强for循环
int[] numbers = {10,20,30,40,50};//定义一个数组
for(int x:numbers){
System.out.println(x); //遍历数组的元素10 20 30 40 50
}
//相当于
for(int i = 0;i < 5;i++){
System.out.println(numbers[i]);
}
这里简述一下与循环类似的递归,说着相似,其实质是不同的,递归的核心是自己调用自己,这里用汉诺塔来简述一下递归。
package com.example.demo1.demo;
import java.util.Scanner;
public class TowersOfHanoi {
static int m =0;//标记移动次数
//实现移动的函数
public static void move(int disks,char N,char M)
{
System.out.println("第" + (++m) +" 次移动 : " +" 把 "+ disks+" 号圆盘从 " + N +" ->移到-> " + M);
}
//递归实现汉诺塔的函数
public static void hanoi(int n,char A,char B,char C)
{
if(n == 1) {//圆盘只有一个时,只需将其从A塔移到C塔
TowersOfHanoi.move(1, A, C);//将编b号为1的圆盘从A移到C
}
else
{//否则
hanoi(n - 1, A, C, B);//递归,把A塔上编号1~n-1的圆盘移到B上,以C为辅助塔
TowersOfHanoi.move(n, A, C);//把A塔上编号为n的圆盘移到C上
hanoi(n - 1, B, A, C);//递归,把B塔上编号1~n-1的圆盘移到C上,以A为辅助塔
}
}
public static void main(String[] args) {
Scanner imput = new Scanner(System.in);
char A = 'A';
char B