java使用条件语句和循环结构确定控制流程。先说条件语句再说循环语句。
最后介绍看似笨重的switch语句。
在java中,有个专业术语,叫做快作用域,很好理解,比如我们创建的main方法,就是一个方法块。
块(即复合语句)是指由一对大括号扩起来的若干条简单的java语句。块确定了变量的作用域。一个块可以嵌套在另一个块中。
例如:
public static void main(String[] args) throws IOException {
int n = 0;
{
int k = 1;
}
}
但是不能再嵌套的两个块中声明同名的变量。
例如:
public static void main(String[] args) throws IOException {
int n = 0;
{
int k = 1;
int n = 0;//ERROR
}
}
条件语句
条件语句格式为:if(condition)statement
这里条件必须被括号括起来。
public static void main(String[] args) throws IOException {
Scanner s = new Scanner(System.in);
System.out.println("yourSales:");
int yourSales = s.nextInt();
System.out.println("target:");
int target = s.nextInt();
if(yourSales >= target){
String Performance = "成功执行if判断";
System.out.println(Performance);
}
}
更一般的条件语句
if(condition) statement1 else statement2
public static void main(String[] args) throws IOException {
Scanner s = new Scanner(System.in);
System.out.println("yourSales:");
int yourSales = s.nextInt();
System.out.println("target:");
int target = s.nextInt();
String Performance = "";
if(yourSales >= target){
Performance = "成功执行if判断";
System.out.println(Performance);
}else{
Performance = "成功执行if.else";
System.out.println(Performance);
}
}
还有if...else if...
public static void main(String[] args) throws IOException {
Scanner s = new Scanner(System.in);
System.out.println("yourSales:");
int yourSales = s.nextInt();
System.out.println("target:");
int target = s.nextInt();
String Performance = "";
if(yourSales > target){
Performance = "成功执行if判断";
System.out.println(Performance);
}else if(yourSales == target){
Performance = "成功执行else if...";
System.out.println(Performance);
}else{
Performance = "成功执行else...";
System.out.println(Performance);
}
}
循环
while循环执行一条语句(也可以是一个语句块),一般格式为:
while(condition)statement
如果一开始循环条件值为false,则while循环体一次都不执行。
public static void main(String[] args) throws IOException {
Scanner s = new Scanner(System.in);
System.out.println("yourSales:");
int yourSales = s.nextInt();
System.out.println("target:");
int target = s.nextInt();
String Performance = "";
while(yourSales>target){
target = target+1;
}
System.out.println(target);
}
在上面示例中,增加一个计数器,在循环体中更新当前的累计数量,知道总之超过目标值为止。
while循环语句先检测循环条件。因此循环体中代码可能不被执行,如果想循环体至少执行一次则应该把检测条件放到最后。使用do/while循环语句可以实现这种操作。
do statement while(condition)
public static void main(String[] args) throws IOException {
Scanner s = new Scanner(System.in);
System.out.println("yourSales:");
int yourSales = s.nextInt();
System.out.println("target:");
int target = s.nextInt();
String Performance = "";
do{
target = target+1;
System.out.println(target);
}while(yourSales>target);
}
确定循环
for循环语句是支持迭代的一种通用结构,利用每次迭代之后更新的技术器或类似的变量来控制迭代次数。
下面的程序将数字1~10输出到控制台。
for( int i=1;i<=10;i++){
System.out.println(i);
}
for语句第一部分通常用于对计数器初始化;第二部分给出每次新一轮循环执行前要检测的循环条件;前3部分只是如何更新计数器。使用for语句注意使用浮点型数据时相等要小心。
在块中定义一个变量,这个变量就不能在循环体外使用。
多重选择switch语句
处理多选项时,使用if/else显得有些笨拙。这时用switch语句就会显得比较方便。
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
System.out.println("请输入相关数字:");
int i = in.nextInt();
switch (i) {
case 1:
System.out.println("T恤");
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;
default:
break;
}
}
中断控制流程语句
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
System.out.println("请输入相关数字:");
int i = in.nextInt();
int a = 1;
int b = 2;
while(i<100){
a += b;
if(a>=10) break; //不带标签的break语句,和switch循环的break是一样的
i++;
System.out.println(i);
}
}
或者在循环体中a>某个数字(比如10),则退出循环语句。
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
System.out.println("请输入相关数字:");
int i = in.nextInt();
int a = 1;
int b = 2;
while(i<=100 && a <10){
a += b;
if(a>=10) break; //不带标签的break语句,和switch循环的break是一样的
i++;
System.out.println(i);
}
还有带标签的break,用于跳出多重嵌套的循环语句。有时候,在嵌套很深的语句中会发生一些不可预料的事情。此时可能更加希望跳到嵌套的所有循环语句之外。通过添加一些额外的条件判断实现各层循环的检测很不方便。
请注意,标签必须放在希望跳出的最外层循环之前,而且必须紧跟一个冒号。
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
System.out.println("请输入相关数字:");
int i = in.nextInt();
int a = 1;
int b = 2;
read_data:
while(i<=100 && a <10){
a += b;
if(a>=10) break read_data; //带标签的break语句
i++;
System.out.println(i);
}
}
最后还有一个continue语句。和break语句一样,它将中断正常的控制流程。continue语句将控制转移到最内层循环的首部。
例如:
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
System.out.println("请输入相关数字:");
int i = in.nextInt();
int a = 1;
int b = 2;
while(i<=100 && a <10){
a += b;
if(a>=10) continue; //这里是跳出循环,不是中断循环
i++;
System.out.println(i);
}
}