Java流程控制
Java流程控制
一、Scanner
Scanner s=new Scanner(System.in);
//在IDE中可以输入new Scanner然后Alt+Enter自动补充
//创建扫描器对象,用于接收键盘数据
通过Scanner类的next()和nextLine()方法获取字符串,读取前需要使用hasNext()和hasNextLine()判断是否还有输入的数据
凡是属于IO流的类,如果不关闭会一直占用资源,所有用完要关闭
scanner.close()
next()和nextLine()区别
next():
- 一定要读取导有效字符才可以结束输入
- 对于有效字符前的空白,会自动去掉
- 只有输入有效字符后,才可以将后面输入的空白作为分隔符或者有效符
- 不能得到带有空格的字符串
nextLine()
- 以Enter为结束符,返回回车前的所有字符
- 可以获得空白
必须掌握
Scanner scanner=new Scanner(System.in);
Double s=scanner.NextDouble();
scanner.close()
例题:
二、顺序结构
按照顺序依次进行
三、选择结构
1、if单选择结构
if(布尔表达式){
//布尔表达式为true时即将执行
}
equals:判断字符串是否相等
if (s.equals("Hello")){
Symtem.out.println("s")
}
System.out.println("end")
//如果s与equals相等,那么输出s,否则输出end
2、if双选择结构
if (score>60){
Symtem.out.println("及格")
}else{
System.out.println("不及格")
}
3、if多选择结构
if(){
}else if{}
else{}
只要一个else if为true,其他else if和if就会跳过,不会执行
4、if嵌套结构
if(){
if(){
}
}
可用于二分法
比如:我们需要查找一个在1~100的数
5、switch多选择结构
switch(){
case value
语句
break;//可选
case value1
语句
break
default:
语句
}
注意:
switch语句中的变量类型支持byte、short、int、char、string
case标签必须为字符串常量或字面量
四、循环结构
1、while循环
while(布尔表达式){
}
布尔表达式一直为true的话,循环一直不会停止
等待客户端连接时,比如QQ等待消息时,可以一直为true,死循环;比如定时检查闹钟
2、do~while循环
do{
}while(布尔表达式);
循环语句至少执行一次,是先执行再判断
3、for循环
for(初始化;布尔表达式;更新){
代码语句
}
死循环:
for(; ; ){
}
在循环中:a+=2 这是迭代的意思
初始化可以声明一种类型,但可以声明一个或者多个循环控制变量,也可以时空语句
如果布尔表达式为true,循环体执行,否则终止。开始执行循环后,先执行一次循环后,在更新循环控制变量,最后再次检测布尔表达式。
练习
计算1~100奇数和偶数的和
public class HelloWorld {
public static void main(String[] args) {
int oddsum=0;
int evensum=0;
for (int i= 0;i <100 ; i++) {
if(i%2==0){
oddsum+=i;
}else{
evensum+=i;
}
}
System.out.println(oddsum);
System.out.println(evensum);
}
}
用while或for循环输出1~1000之间能被5整除的数,并且每行输出3个
for循环
public class HelloWorld {
public static void main(String[] args) {
for (int i = 1; i < 1000; i++) {
if (i % 5 == 0) {
System.out.print(i + "\t");
}
if (i % 15 == 0) {
System.out.println();
}
}
}
while循环:
public class HelloWorld {
public static void main(String[] args) {
int i = 1;
while (i <= 60) {
if (i % 5 == 0) {
System.out.print(i + "\t");
}
if (i % 15 == 0) {
System.out.println();
}
i++;
}
}
}
注意:这里的\t是制表符,可以使同一行两个数隔开
打印九九乘法表
外层循环控制行,内层循环控制列
步骤:
先打印第一列
把固定的1用一个循环包起来
去掉重复项 n<m (按行看)
最后调整样式
public class HelloWorld {
public static void main(String[] args) {
for (int m = 1; m <= 9; m++) {//第m行乘于第n列,其中n<m
for (int n = 1; n < m; n++) {//n代表列,m代表行
System.out.print(n+""+m+"="+(nm)+"\t");
}
System.out.println();
}
}
}
4、增强for循环
本质是迭代器,重点用来循环数组和集合的
public class HelloWorld {
public static void main(String[] args) {
int [] numbers={10,2,3,4,5};//声明数据类型int [],再声明数组名称numbers,最后赋值
for(int x:numbers){//将numbers数组里的值赋给变量x
System.out.println(x);
}
/*以下的写法跟增强for循环一样
int [] numbers={10,2,3,4,5};
for(i=0;i<=4;i++){
System.out.println(numbers[i]);依次输出数组numbers里的值
}
* */
}
}
5、break和continue
break用于强制退出,不执行循环剩余的语句,也可以在switch语句中使用
continue用于终止某次循环,即跳过本次循环体中未执行的语句,再接着进行下一次是否循环的语句
关于goto关键字:
goto是Java的保留字,但并未在语言中得到使用
标签是指后面跟一个冒号的标识符 如 label:
唯一用到标签的地方是在循环语句之前,在循环之前设置是希望在里面嵌套一个循环,由于break和continue关键字只中断当前循环,若随标签一起使用,它们就会中断到存标签的地方
求101~150的质数
public class HelloWorld {
public static void main(String[] args) {
//求101~150的质数
outer:for (int i = 101; i < 150; i++) {
for (int j = 2; j < i/2; j++) {
if(i%j= =0) {
continue outer;//此处如果为true,那就会跳回标签所在处,i重新加1,重新执行
}
}
System.out.print(i+"\t");//如果i%j==0为false,则执行该语句,不执行continue outer;
}
}
}
五、流程控制练习
打印三角形(5行)
public class HelloWorld {
public static void main(String[] args) {
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();
}
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)