1.用户交互scanner
在程序中,调用Scanner类可以让我们的操作和程序互动起来。
基本语法:
Scanner s = new Scanner(System.in);//创建一个扫描对象,用于接收键盘数据;
先创建一个扫描对象,然后通过Scanner类的next()方法与nextLine()方法获取输入的字符串,在读取前,需要使用hasNext()方法与hasNextLine()判断是否还有输入的数据。
next()方法与nextLine()方法:
- next():
- 一定要读取到有效字符后才可以结束输入。
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉。
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
- next()不能得到带有空格的字符串。
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
if (scanner.hasNext()){
String str = scanner.next();
System.out.println("输入的内容:"+str)
}
scanner.close();//I/O流的类如果不关闭会一直占用资源,因此一定要养成用完就关闭的好习惯。
- nextLine():
- enter为结束符,也就是说nextLine()方法返回的 是输入回车之前的所有字符。
- 可以获得空白。
Scanner scanner1 = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
if (scanner.hasNext()){
String str = scanner1.nextLine();
System.out.println("输入的内容:"+str)
}
scanner.close();
(注:使用Scanner类要记住在main方法之前导入包)
inport java.util.Scanner;
2.顺序结构
java基本结构就是顺序结构,除非特别声明,否则就会按照顺序一句一句执行。(顺序结构是最简单的算法结构)
语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
3.if选择结构
-
if选择结构:
if(布尔值表达式){
//如果布尔值表达式为true将执行的语句
}
-
if双选择结构:
if(布尔表达式){
//布尔表达式为true将执行的语句
}else{
//布尔表达式为true将执行的语句
}
-
if多选择结构
if(布尔表达式1){
//布尔表达式1为true将执行的语句
}else if(布尔表达式2){
//布尔表达式2为true将执行的语句
}…{
}else{
//以上布尔表达式均为false将执行的语句
}
-
嵌套的if结构
就是讲if/else语句嵌套入另一个if语句中
if(布尔表达式1){
//布尔表达式1true
if(布尔表达式2){
//布尔表达式2为true执行的代码
}
}
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的成绩:");
Double z = scanner.nextDouble();//将用户输入的内容赋值给z
if (z >= 60 && z <= 100) {//判断z是否在60-100
if (z == 100) {//如果z=100输出成绩为A+
System.out.println("A+");
} else if (z >= 80) {//如果z >= 80输出成绩为A
System.out.println("A");
} else {//否则输出成绩为B
System.out.println("B");
}
} else if (z > 0 && z < 60) {//判断是否在0-60范围内,若在则输出成绩为不及格
System.out.println("没及格");
} else {//若成绩不在60-100,也不在0-60之间,则输出警告字符串:输入成绩不合法
System.out.println("输入成绩不合法");
scanner.close();
}
}
}
3.switch多选择结构
String name = "兔叽";
switch(name){
case "福腻":
System.out.println("福腻");
break;
case "兔叽":
System.out.println("兔叽");
break;
default;//若选择和变量都不匹配时执行的代码
System.out.println("妹有zhei人儿!");
}
//结果输出为兔叽
switch选择结构会优先去匹配变量与选择,会从匹配行开始执行代码,直至遇到break或者代码执行完毕。
break是可以选择是否使用的,若不使用break,则代码会从匹配行执行到最后,若使用break终止代码,则代码将在break后停止执行。
4.循环结构
1.while循环(求1-100的和示例)
int i = 0;
int sum = 0;
while(i < 100){//只要布尔值表达式为true中间的内容就会一直循环
i++;//循环内容
sum += i;//循环内容
}
System.out.println(sum)
2.do…while循环
对于while循环语句,若布尔表达式为false则不能进入循环,而do…while循环则会至少进入一次循环。可用以下例子证明:
int a = 0;
while(a < 0){
System.out.println(a);
a++
}
System.out.println("==========================");//将结果分开
do{
System.out.println("a");
a++;
}while(a<0);
//while循环将不会输出任何结果,而下面do...while循环将输出0
3.for循环
for循环语句是支持迭代的一种通用结构,也是最有效最灵活的一种结构。for循环不像while循环与do…while循环循环次数未知,for循环的执行次数是在执行之前就确定。
for循环结构:
for(初始化;布尔值表达式;更新){
//代码语句
}
执行流程:初始化值声明一种类型,可以初始化一个或者多个循环控制变量,也可以是空语句,然后执行布尔值表达式。如果为true,循环体被执行。如果为false,循环终止然后执行循环体后面的语句。
执行一次循环后,更新循环控制变量(迭代因子控制U型你换变量的增减),并再次重复上述流程。
最简单的for循环代码:死循环
for(;;){
}//无初始值,无判断,是一个死循环,无论什么循环我们都要避免死循环。
for循环示例:打印乘法口诀表
int num01 = 0;
for(int i = 1;i <= 9;i++){//实现遍历1~9使得循环体都会执行9次
for(int j=1;j <= i;j++){//实现遍历1~i次,这样就可以保证每一行只有i个数
num01 = i*j;//将相乘的数字赋值给num01
System.out.print(i+"*"+j+"="+num01+" ")//每相乘一次便输出一个结果,请一定注意这里使用的是“print”而不是“println”实现的是打印内容不换行
}
System.out.println()//每执行一次内部for循环就进行一次换行
}
总结循环:由上述问题我们要开始学会对程序问题进行拆分以乘法口诀表为例:
由于乘法口诀表示九行九列,因此我们首先使用一个for循环实现保证能够打印出九行内容,那么我们九列九行的内容相当于又是一次遍历,则想到嵌套循环,使得能够保证有九列内容。然后由于我们都知道乘法口诀只有一个下三角,所以我们要想办法去掉重复的数字,则想到外部循环的i是从1到9递增,而乘法口诀也是第几行只有几个数字,从而只要内部循环是<= i就可以实现,每一行都只有i个数字,即,每一行都只有i列,最终再调整输出内容的样式使其成为axb=c的格式即可。
4.拓展:增强for循环
格式:
for(声明语句:表达式){
//代码句子
}
声明语句:声明新的局部变量,该变量的类型个数必须和数组元素匹配。其作用域限定在循环语句中,其值与此数组元素的值相等。
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。例
int[] numbers = {10,20,30,40,50};
for(int x :numbers){
System.out.println(x+" ");
}
5.break与continue
1.break:break语句在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。
(前面提到了switch中break的用法不再赘述)例:
int i = 0;
while(i < 100){
i++;
System.out.println(i);
if(i == 30){
break;
}
}
//if语句使得当i==30时候执行break,则循环停止,输出结果只能为1~30。
2.continue:
continue语句在循环语句中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环语句。
示例:
int i = 0;
while(i < 100){
j++;
if(j%10 == 0){
System.out.println();
continue;
}
System.out.println(j);
}
//每遍历到10的整倍数都会终止此次循环,进行下一次循环。比起break相对较弱一点。
6.输出一个等腰三角形
最后当然离不开我们的三角形联系:
第一种思路:
for (int i = 1; i <= 5; i++) {
for (int j = 0; j <= 5 - i; j++) {
System.out.print(" ");
}
for (int j = 1; j <= i; j++) {
System.out.print("* ");
}
System.out.println();
}
第一种思路是首先完成一个右直角三角形,然后输出时候把星星后面空一格,就完成了。
第二种思路:
for(int i = 0;i < 5;i++){
for(int j = 5;j >= i;j--){
System.out.print(" ");
}
for(int k = 1;k <= i;k++){
System.out.print("*");
}
for(int l = 1;l < i;l++){
System.out.print("*");
}
System.out.println();
}
第二种思路则是采取了两个三角形相加的思路得到的,外层循环控制行数,第一个嵌套循环控制空格列数使得每一行的*确定,第二个嵌套循环控制左边的四行三角形,第三个嵌套循环控制右边的三行三角形,使其在第二行才开始输出。
结语
好了,那么流程控制小结就写到这里,主要就就是交互、选择结构、循环结构的学习。
以上的总结也还请各位小伙伴批评指正。
最后还是要感谢学相伴www.kuangstudy.com提供的学习视频,这是由两位大佬制作的自学网站,目前只有java的全套视频(可能部分没有),如果有兴趣的话,可自行尝试。反正我认为老师讲的还是非常好的,而且课程全部免费,并且还是按照学习路线排好顺序的,无论是对小白, 还是对知识需要补充的大佬,都是很友好的网站。