接下来我们来看流程控制方面的知识
要使用用户交互的Scanner,我们首先必须导入该类(先试着去敲代码)导入java.util包下的Scanner类,Scanner类是Java标准库中的一个工具类,它提供了一种方便的方式来读取用户从标准输入流(通常是键盘)输入的数据。
import java.util.Scanner;
step1 导入Scanner类:在程序中使用import java.util.Scanner;语句导入Scanner类。
step2 创建Scanner对象:在程序中使用Scanner scanner = new Scanner(System.in);语句创建Scanner对象,其中System.in表示标准输入流。
step3 使用Scanner对象读取数据:使用Scanner对象的next()、nextInt()等方法读取从标准输入流中输入的数据。
package com.process_control;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象用于接收键盘数据
Scanner scanner=new Scanner(System.in);
System.out.println("使用next方式接收:");
if(scanner.hasNext())
{
String str= scanner.next();
System.out.println("输出的内容为:"+str);
}
//凡是IO流的类,如果不关闭会一直占用资源,养成好习惯
scanner.close();
}
}
啊!为啥输入的Hello world 输出之后变成了Hello?因为
next()是Scanner类中的一个方法,可用于从标准输入流(通常是键盘)获取下一个标记(由空格、制表符或换行符分隔的字符串)。
next()方法会读取输入流中的下一个标记,并返回一个String类型的值。如果输入流中没有下一个标记,则next()方法会等待用户的输入直到有输入为止。
这里遇到下一个标记为空格,于是乎,输出Hello,
那么,我们需要有这些标记符(空格,制表符)的字符串怎么办了?
答:使用nextLine()方法,实例:
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
System.out.println("haha,接下来使用nextLine()方式:");
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
System.out.println("输出:"+str);
}
}
hasNext()是Scanner类中的一个方法,用于判断输入流中是否还有下一个标记(由空格、制表符或换行符分隔的字符串)。
hasNext()方法返回一个boolean类型的值,如果输入流中有下一个标记,则返回true,否则返回false。
scanner.nextInt()是Java中Scanner类的一个方法,用于从标准输入(通常是键盘)中读取下一个整数。它的语法形式如下:
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
首先创建了一个Scanner对象,并将其初始化为System.in,表示从标准输入中读取数据。然后,通过调用nextInt()方法,从标准输入中读取下一个整数,并将其保存在num变量中。
需要注意的是,如果标准输入中没有下一个整数,则nextInt()方法会阻塞程序的执行,直到有新的输入为止。如果输入的数据不是整数,则会抛出InputMismatchException异常。
除了nextInt()方法,Scanner类还提供了其他一些方便的方法,如nextDouble()、nextLine()等,用于读取不同类型的数据。
if (condition) {
// 如果condition为true,则执行这里的代码块
} else {
// 如果condition为false,则执行这里的代码块
}
实例
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个整数:");
int num = scanner.nextInt();
if (num > 0) {
System.out.println(num + "是一个正数。");
} else {
System.out.println(num + "不是一个正数。");
}
}
}
if (condition1) {
// 如果condition1为true,则执行这里的代码块
} else if (condition2) {
// 如果condition2为true,则执行这里的代码块
} else if(condition3){
//如果condition3为true,则执行这里
}
else {
// 如果上述条件都不成立,则执行这里的代码块
}
switch…case语句是一种多重条件判断语句,用于根据不同的值执行不同的代码块。它的语法形式如下:
switch (expression) {
case value1:
// 如果expression的值等于value1,则执行这里的代码块
break;
case value2:
// 如果expression的值等于value2,则执行这里的代码块
break;
...
default:
// 如果上述所有条件都不成立,则执行这里的代码块
break;
}
在switch…case语句中,expression是一个表达式,它的值会与每个case后面的值进行比较。如果匹配到某个case后面的值,则执行对应的代码块。如果没有匹配到任何一个case,则执行default后面的代码块。
需要注意的是,每个case后面必须加上break语句,用于结束switch…case语句。如果没有break语句,则会继续执行下一个case的代码块,直到遇到break或者default为止。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入1-7之间的整数:");
int num = scanner.nextInt();
switch (num) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("输入有误,请重新输入。");
}
}
}
for 循环是最常用的循环结构之一,它允许你指定一个初始值、一个条件和一个步进表达式,来控制循环的执行次数。语法如下:
for (初始化; 条件; 步进) {
// 循环体代码
}
初始化:在循环开始时执行一次,用于初始化计数器或设置循环变量的初始值。
条件:每次循环开始前检查的条件,如果条件为真,则继续执行循环体;如果条件为假,则退出循环。
步进:在每次循环结束后执行的操作,用于更新计数器或循环变量的值
练习题:
打印如下三角形:
*
***
*****
*******
*********
public class Day11201 {
public static void main(String[] args) {
for(int i=1;i<=5;i++)
{
for(int j=4;j>=i;j--)
{
System.out.print(" ");
}
for(int j=1;j<=i;j++)
{
System.out.print("*");
}
for(int j=1;j<=i-1;j++)
{
System.out.print("*");
}
System.out.println();
}
}
}
step1:根据题意,我们需要打印出具有5行的对称三角形,故外层循环为1-5
step2:内层第一个for循环打印左边的空格,我们在纸上画一下可以发现,空格随着行数的增加数量从4到0依次递减
step3:内层第二个for循环,我们打印的是对称三角形的左边*,我们知道第一行有1个*,第2行2个依次类推,故j<i;
step4:内层第三个for,打印右边的*,因此,我们可以发现右边的*,每次比行数少1.
while 循环会在指定条件为真时重复执行循环体。语法如下:
while (条件) {
// 循环体代码
}
条件:在每次循环开始前检查的条件,如果条件为真,则继续执行循环体;如果条件为假,则退出循环。
public class Day11202 {
public static void main(String[] args) {
int m=0;
double sum=0;
Scanner scanner=new Scanner(System.in);
while(scanner.hasNextDouble())
{
m+=1;
sum+=scanner.nextDouble();
}
System.out.println("输入有多少个数:"+m);
System.out.println("输入数之和为:"+sum);
}
}
do-while 循环和 while 循环类似,不同之处在于 do-while 循环会先执行一次循环体,然后检查条件。语法如下:
do {
// 循环体代码
} while (条件);
条件:在每次循环结束后检查的条件,如果条件为真,则继续执行循环体;如果条件为假,则退出循环。
foreach 循环用于遍历数组或集合中的元素,无需使用索引。语法如下:
for (元素类型 元素变量 : 数组或集合) {
// 循环体代码
}
元素类型:表示数组或集合中元素的类型。
元素变量:表示当前循环迭代的元素。
public class Day11203 {
public static void main(String[] args) {
int[] arr={1,2,3,4,5};
for(int i=0;i<5;i++)
{
System.out.print(arr[i]);
}
System.out.println();
for(int x:arr)
{
System.out.print(x);
}
System.out.println();
}
}
public class Day11204 {
public static void main(String[] args) {
int odd_sum=0;
int even_sum=0;
for(int i=0;i<100;i++)
{
if(i%2==0)
{
even_sum+=i;
}
else
{
odd_sum+=i;
}
}
System.out.println("所有的奇数和为:"+odd_sum);
System.out.println("所有的偶数和为:"+even_sum);
}
}
所有的奇数和为:2500
所有的偶数和为:2450
package com.determination;
public class Day11205 {
public static void main(String[] args) {
int flag=0;
for(int i=1;i<=1000;i++)
{
if(i%5==0)
{
System.out.print(i+" ");
flag++;
if(flag%4==0)
{
System.out.println();
}
}
}
}
}
public class Day11206 {
public static void main(String[] args) {
for(int i=1;i<=9;i++)
{
for(int j=1;j<=i;j++)
{
System.out.print(i+"x"+j+"="+i*j+" ");
}
System.out.println();
}
}
}
1x1=1
2x1=2 2x2=4
3x1=3 3x2=6 3x3=9
4x1=4 4x2=8 4x3=12 4x4=16
5x1=5 5x2=10 5x3=15 5x4=20 5x5=25
6x1=6 6x2=12 6x3=18 6x4=24 6x5=30 6x6=36
7x1=7 7x2=14 7x3=21 7x4=28 7x5=35 7x6=42 7x7=49
8x1=8 8x2=16 8x3=24 8x4=32 8x5=40 8x6=48 8x7=56 8x8=64
9x1=9 9x2=18 9x3=27 9x4=36 9x5=45 9x6=54 9x7=63 9x8=72 9x9=81
打印出101-150之间的所有质数
public class Day11207 {
public static void main(String[] args) {
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;
}
}
//打印出101-150之间的所有质数
System.out.print(i+" ");
}
}
}