零基础学Java(6)控制流程
控制流程
与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程。
块作用域
我们首先要了解块(block)的概念。
块是指由若干条Java语句组成的语句,并用一对大括号括起来。块确定了变量的作用域。一个块可以嵌套在另一个快中。下面就是嵌套在main方法块中的一个块。
public static void main(String[] args) {
int n = 1;
{
int k = 3;
System.out.println(k); // success
} // k只在这个块中被定义
System.out.println(k); // error
}
但是,不能在嵌套的两个块中声明同名的变量,否则就会有错误,无法通过编译:
public static void main(String[] args) {
int n = 1;
{
int k = 3;
int n = 2;
}
}
这里已经在外面定义了n,就不能再嵌套的块中再定义n了。
条件语句
在Java中,条件语句的形式为
if (condition) statement
这里的条件必须用小括号括起来。剩下的跟其他语言语法几乎一直,直接看以下例子
import java.util.Scanner;
public class SecondSample {
public static void main(String[] args) {
/*
* 根据销售额来评价你的表现,奖励你不同的金额
* */
// 创建输入对象
Scanner in = new Scanner(System.in);
System.out.println("请输入你的销售额");
// 在控制台输入你的销售额
int yourSales = in.nextInt();
// 定义一个目标
int target = 1000;
// 初始化表现
String performance;
// 初始化奖金
int bonus;
if (yourSales >= 2 * target) {
performance = "优秀";
bonus = 1000;
System.out.printf("你的表现为%s,奖励你%d元%n", performance, bonus);
} else if (yourSales >= 1.5 * target) {
performance = "良好";
bonus = 500;
System.out.printf("你的表现为%s,奖励你%d元", performance, bonus);
} else if (yourSales >= target) {
performance = "及格";
bonus = 100;
System.out.printf("你的表现为%s,奖励你%d元", performance, bonus);
} else {
System.out.println("You 're fired");
}
}
}
while循环
当条件为true时,while循环执行下一条语句。一般形式如下:
while (condition) statement
我们设定一个程序,计算需要多长时间才能够存储一定数量的退休金,假定每年存入相同数量的金额,而且利率是固定的。
import java.util.Scanner;
public class ThirdSample {
public static void main(String[] args) {
/*
* 计算需要多长时间才能够存储一定数量的退休金
* */
Scanner in = new Scanner(System.in);
System.out.println("你需要多少退休金?");
double goal = in.nextDouble();
System.out.println("你每年将增加多少钱?");
double payment = in.nextDouble();
System.out.println("利率是多少:");
double interestRate = in.nextDouble();
double balance = 0;
int years = 0;
// 未达到目标时更新帐户余额
while (balance < goal) {
// 加上今年的付款和利息
balance += payment;
double interest = balance * interestRate / 100;
balance += interest;
years++;
}
System.out.printf("你可以在%d年内退休", years);
}
}
while循环是先判断后执行,如果条件不满足则永远是false,那么可能永远不会执行,如果我们想无论条件是否为true,我们都要先执行一条语句,那么在Java中提供了do..while...这种循环形式。
do statement while (condition)
下面的例子中,首先计算退休账户中的新的余额,然后再询问是否打算退休:
public class ThirdSample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("你每年将增加多少钱?");
double payment = in.nextDouble();
System.out.println("利率是多少?");
double interestRate = in.nextDouble();
double balance = 0;
int year = 0;
String input;
do {
balance += payment;
double interest = balance * interestRate / 100;
balance += interest;
year++;
System.out.printf("%d年后,你的余额为%,.2f%n", year, balance);
System.out.println("准备退休?(Y/N)");
input = in.next();
}
while (input.equals("N"));
}
}
for确定循环
for循环语句是支持迭代的一种通用结构,由一个计数器或类似的变量控制迭代次数,每次迭代后这个变量将会更新。
for (int i=1; i<=10; i++){
System.out.println(i);
}
for语句的第1部分通常是对计数器初始化;第2部分给出每次新一轮循环执行前要检测的循环条件;第3部分指定如何更新计数器。
与C++一样,尽管Java允许在for循环的各个部分放置任何表达式,但有一条不成文的规则:for语句的3个部分应该对同一个计数器变量进行初始化、检测和更新。若不遵守这一规则,编写的循环常常晦涩难懂。
注意:在循环中,检测两个浮点数是否相等需要格外小心。for (double x=0;x!=10;x+=0.1),这条语句永远不会结束。由于舍入的误差,永远达不到精确的最终值。因为0.1无法精确地用二进制表示,所以,x将从9.999 999 999 999 98跳到10.099 999 999 999 98。
多重选择:switch语句
在处理多个选项时,使用if/else语句就显得有些笨拙。Java有一个与C/C++完全一样的switch语句。例如,下面包含4个选项的菜单系统
public class FifthSample {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Select an option (1, 2, 3, 4)");
int choice = in.nextInt();
switch (choice)
{
case 1:
System.out.println("我选择了1");
break;
case 2:
System.out.println("我选择了2");
break;
case 3:
System.out.println("我选择了3");
break;
case 4:
System.out.println("我选择了4");
break;
default:
System.out.println("默认选择");
break;
}
}
}
switch语句将从与选项值相匹配的case标签开始执行,直到遇到break语句,或者执行到switch语句的结束处为止。如果没有相匹配的case标签,而有default子句,就执行这个子句。
注意:强烈不建议使用switch语句,最好永远不要使用,因为如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支语句。这种情况跟相当危险,常常会引发错误。
case的标签可以是:
- 类型为char、byte、short或int常量表达式
- 枚举常量
- 从Java7开始,case标签还可以是字符串字面量
零基础学Java(6)控制流程的更多相关文章
- 零基础学Java第二节(运算符、输入、选择流程控制)
本篇文章是<零基础学Java>专栏的第二篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 第一章 运算符 1.1 算术运算符的概述和用法 运算符 对常量和变 ...
- 零基础学Java第三节(基本输入输出)
本篇文章是<零基础学Java>专栏的第三篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 本文章首发于公众号[编程攻略] Java程序的命令行参数 我们可以 ...
- 零基础学Java第五节(面向对象一)
本篇文章是<零基础学Java>专栏的第五篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 本文章首发于公众号[编程攻略] 类与对象 在哲学体系中,可以分为主 ...
- 零基础学Java,PayPal技术专家手把手带你入门
在最权威的 TIOBE 编程语言排名榜单上,Java 常年稳居第一,可以说是世界上应用最为广泛的一门语言. 同时,在微服务.云计算.大数据.Android App 开发等领域,Java 也是当之无愧的 ...
- 零基础学Java第四节(字符串相关类)
本篇文章是<零基础学Java>专栏的第四篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! String 本文章首发于公众号[编程攻略] 在Java中,我们经 ...
- 零基础学Java第一节(语法格式、数据类型)
本篇文章是<零基础学Java>专栏的第一篇文章,从本篇文章开始,将会连更本专栏,带领大家将Java基础知识彻底学懂,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! ...
- 零基础学Java第六节(面向对象二)
本篇文章是<零基础学Java>专栏的第六篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 本文章首发于公众号[编程攻略] 继承 创建一个Person类 我们 ...
- 零基础学Java(1)初识Java程序
前言 就国内来说,Java毫无疑问是后端语言中的No.1没有之一,所以今天我们也来0基础学习Java!!! Java的好处(针对测试工程师) 面试加分->涨薪 大多数公司服务端用的都是Java, ...
- [零基础学JAVA]Java SE基础部分-01. Java发展及JDK配置
转自:http://redking.blog.51cto.com/27212/114976 重点要会以下两个方面: 1. 抽象类与接口 2. API==>类集 这是两个最重要部分,这两个部分理解 ...
随机推荐
- Halo 开源项目学习(六):事件监听机制
基本介绍 Halo 项目中,当用户或博主执行某些操作时,服务器会发布相应的事件,例如博主登录管理员后台时发布 "日志记录" 事件,用户浏览文章时发布 "访问文章" ...
- FreeRTOS --(2)内存管理 heap1
转载自https://blog.csdn.net/zhoutaopower/article/details/106631237 FreeRTOS 提供了5种内存堆管理方案,分别对应heap1/heap ...
- 1.SSH协议学习笔记
一.SSH介绍 介绍: SSH全称是Secure Shell,安全外壳协议. 端口号:22: 如何查看服务端口号: grep ssh /etc/services netstat -antup | gr ...
- .net core JWT验证,HttpContext.User为空的问题
这几天在学习张老师.net core教程JWT部分,链接 https://mp.weixin.qq.com/s/7135y3MkUlPIp-flfwscig 教程使用的.net core 2.2, 在 ...
- zabbix-agent python脚本侦听服务器异常登录,并告警
py脚本 import re,subprocess,time,datetime #gpasswd -a zabbix adm def ftime(a): a = a.replace('Jan','01 ...
- hihocoder 1193 树堆 解题报告
题目大意:给出一棵有根树(根为 \(0\) ),点有点权.可以删除点(非根),并将其子树接到其父亲上.我们称一个树为树堆当前仅当树上每个点都满足其权值大于等于其子树中所有点的点权.现在对于每个点要求其 ...
- CF1588F Jumping Through the Array
在讲正解之前,先播一个小故事: xay 复杂度错误过题.将操作按照时间分块,块内他令所有置换环都必须有至少一个"黑点". 可以通过没有修改 \(p\) 操作,同时 \(p_i=i\ ...
- Java命令行传递参数
目录 命令行传参 代码运行 视频 命令行传参 有时候你希望运行一个程序的时候再传递给它消息. 这要靠传递命令行参数给main()函数实现 package com.broky.base; public ...
- JAVA - 缓冲和缓存
JAVA - 缓冲和缓存 缓冲 Buffer 功能:协调上下层应用之间的性能差异.通过缓冲区的缓冲,当上层组件性能优于下层组件的时候,缓冲可以有效减少上层组件对下层组件的等待时间. 使用场景:IO流中 ...
- BitBlt()函数实现带数字百分比进度条控件、静态文本(STATIC)控件实现的位图进度条、自定义进度条控件实现七彩虹颜色带数字百分比
Windows API BitBlt()函数实现带数字百分比进度条控件. 有两个例子:一用定时器实现,二用多线程实现. 带有详细注解. 此例是本人原创,绝对是网上稀缺资源(本源码用Windows AP ...