Java中的流程控制语句

时间:2019-04-29 03:17:55  来源:igfitidea点击:

在本文中,我们可以看到如何用Java实现基本的流控制结构/语句:

决策结构:if , if – else, switch;

**循环块的结构:**do while,while–do,enhanced–for;

循环控制指令:break, continue;

使用控制结构,我们可以编写执行不只是指令线性序列的程序。

在Java中如何使用if–then控制语句

条件流控制结构 if–then,具有以下形式:

if(条件)
    语句

或者

if(条件){
    语句1;
    语句2;
}

其中 条件是一个值为 true或*false *的布尔表达式或变量。例如 30>10或10==30。

在Java中,不接受基于具有数值的表达式或变量的条件。例如,以下表达式在C/C++中有效,但在Java中无效:

int valoare = 10;
if(valoare)
    System.out.println("大于0!");

会报编译错误: 不兼容类型 : incompatible types.

为了说明if then子句,我们确定一个数字是否为负数,如果为负数,则更改其符号:

int negativeNumber = -22;
boolean isNumber = true;

if(isNumber)
    System.out.println("It's a number";);

if(negativeNumber < 0)
{
    System.out.println("It's a negative one! Change it.");
    negativeNumber = (-1) *negativeNumber;
    System.out.println(negativeNumber);
}

在Java中如何使用if–then–else控制语句

if–else控制子句的格式如下:

if(条件){
    语句1;
    语句2;
}
else{
    语句3;
    语句4;
}

如果我们想知道两个数字的最小值:

int vb1 = 10;
int vb2 = 20;
int min;
if(vb1 < vb2)
    min = vb1;
else
    min = vb2;

还可以通过条件运算符?:来实现:

条件 ? 条件为true时执行的语句 : 条件为flase时执行的语句

上一个例子变成:

 min = vb1 < vb2 ? vb1 : vb2;

在Java中如何使用do–while循环

重复结构do-while实现了一个后处理循环,因为在循环块的末尾检查退出/留在循环中的条件。
结构将至少运行一次循环块中的迭代语句:

do{
    语句1;
    语句2;
} while(条件);

例如,如果我们想计算N!(前提是N>1)在ado-while中:

// 计算n的阶乘
int nFactorial = 1;
int i = 0;
int n = 5;
do
{
    i++;
    nFactorial = nFactorial *i;
}while(i < n);
// 输出结果
System.out.println(n+"! = "+nFactorial);

如何在Java中使用while–do循环

重复结构while-do实现一个预处理周期,因为在执行循环块中的第一条语句之前,检查退出/留在循环中的条件:

while(条件){
    语句1;
    语句2;
}
// 计算n的阶乘
int nFactorial = 1;
int i = 0;
int n = 5;
while (i < 5)
{
    i++;
    nFactorial = nFactorial *i;
}
System.out.println(n+"! = "+nFactorial);

如何在Java中使用for循环

for重复结构实现了一个预先设置好的循环结构,就像do while一样。for结构效率更高,因为迭代和初始化语句包含在结构中而不是块中:

 for(初始化; 条件; 迭代语句){
     语句1;
     语句2;
 }

例如,要计算数组中元素的和:

int[] vector = {1,2,3,4,5};
int sum = 0;
for(int j = 0; j < vector.length; j++)
    sum += vector[j];
System.out.println("The sum is "+sum);

for控制结构中,可以编写多个由(逗号)分隔的迭代和初始化语句:

for(初始化语句1,初始化语句2; 条件; 迭代语句1,迭代语句2){
    语句1;
    语句2;
}

for语句元素:初始化、迭代和条件是可选的。下一个例子是合法的,但在某些情况下,我们必须决定for循环何时将使用break结束。

for( intialization; ; )
for( ; condition; iteration )
for( ; ; iteration)
for( ; ; ) // 死循环

在初始化语句中声明的变量是For块的局部变量,在外部不可见:

for ( int i=0; i<10 ; i++ ) {

}
// compile-error, cannot resolve symbol: i
// 编译错误,无法解决符号:i
System.out.println("value of i: " + i );

如何在Java中使用 增强的for循环

重复的增强的for结构实现了一个预处理循环。这个结构是在Java5.0中引入的,它允许更简单的语法和更快的实现(类似.net中的 foreach形式))。此结构只能用于遍历实现java.lang.Iterable语言接口。

for ( variable: iterable_collection )
{
    语句1;
    语句2;
}

使用增强型的for重写前面的示例:

sum = 0;
for(int value: vector)
{
    suma += value;
}
System.out.println("总和是:"+sum);

如何在Java中使用switch语句

switch条件结构实现了一个具有多个分支的条件结构。它替换了一个比多个 if-then-else 子句更有效的结构。

switch (变量) {
case 常量值1:
    语句1;
    break;
case 常量值2:
    语句2;
    break;
...
default:
    语句;
}

每个case子句必须用 break指令关闭,因为它提供了退出 switch结构的方法。

例如,通过switch语句测试变量值比通过多个if语句更容易。

int testValue = 2;
switch(testValue)
{
    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("其他值");
}

通过运行上面的例子,我们得到了这样一条消息: 值是2。

如果我们不使用break指令,那么前面的示例将显示:

值是2
值是3
值是4
其他值

如何在Java中使用 breakcontinue语句

break语句停止由for、do whilewhile do实现的当前循环块。另外,如果在switch结构中使用它,它将关闭最后一个case子句。

continue指令将挂起for,do whilewhile do循环块的当前迭代,并将执行下一次迭代。

例如,让我们确定给定数组中所有元素为正数的和:

         int[] intValues = {10,12,5,-4,3,-1,23};
         int positiveSum = 0;
         for(int j = 0; j < intValues.length; j++)
         {
             if(intValues[j] < 0)   // 如果是负数,则直接进行下一次迭代
                 continue;          
            
             // 计算其他值的和
             positiveSum+=valoriInt[j];
         }
         System.out.println("正数的和为: "+positiveSum);

或者,让我们确定第一次出现的负值:

int[] intValues = {10,12,5,-4,3,-1,23};
int negativeValue = 0;
for(int j = 0; j < intValues.length; j++)
{
    if(intValues[j] < 0)
    {
        // 如果是第一个负数,则保存其值
        negativeValue = intValues[j];
        // 并终止循环
        break;
    }
}
System.out.println("第一个负数是"+negativeValue);