while语句的语法格式如下:
while(表达式) { 语句块 }
参考答案
while语句,首先判断表达式的值是否为 true,如果为 true,则执行大括号中的语句块;然后再判断表达式的值是否为 true,依次重复下去,直到表达式的值等于false,则不再执行大括号中的语句块,循环结束。
public static void main(String[] args) { int count=0; while(count<5); { System.out.print(count+" "); count++; } }
参考答案
这段代码会形成一个死循环。
乍一看,这段代码片段没有任何问题,但仔细看一下这个程序,不难发现while循环的循环条件表达式后紧跟了一个分号。在Java中,一个单独的分号表示一个空语句,不做任何事情的空语句,这意味着这个while循环的循环体是空语句。空语句作为循环体也不是大问题,问题是当Java反复执行这个循环时,循环条件的返回值没有任何变化,这就形成了一个死循环。分号后面的代码块则与while循环没有任何关系。
public static void main(String[] args) { int count=10; do { System.out.print(count+" "); count++; }while(count<5); }
参考答案
输出结果为:count=10。
从上面程序看,虽然count的值为10,表达式count<5返回false,但是do-while语句还是会执行一次循环体,输出count=10。
参考答案
while语句和do-while语句的区别在于:while语句是先判断循环条件,如果条件为真则执行循环体;而do-while语句则先执行一次循环体,然后才判断循环条件,如果循环条件为真,则执行下一次循环,否则终止循环。
for语句的语法格式如下:
for(表达式1;表达式2;表达式3) { 语句块 }
参考答案
for语句,首先计算表达式1,接着执行表达式2,若表达式2的值等于true,则执行大括号中的语句块,接着计算表达式3,然后再判断表达式2的值。依次重复下去,直到表达式2的值等于false。
public static void main(String[] args) { for(int i=0,j=0,k=0;i<10&&j<4&&k<10;j+=2){ System.out.println(i++); System.out.println(++k+i); } }
参考答案
正确。
首先,for循环允许同时出现多个初始化语句。上面代码中初始化变量有三个,但是只能有一个声明语句,因此如果需要在初始化表达式中声明多个变量,那么这些变量应该具有相同的数据类型。
其次,循环条件也可以是一个包含逻辑运算符的表达式。上面代码中使用&&来组合多个boolean表达式。
最后,循环迭代语句可以是任何表达式。上面代码中使用了j+=2。
public static void main(String[] args) { for (int i = 0; i < 10; i++) { System.out.println("i=" + i); if (i == 2) { break; } } }
参考答案
输出结果为:i=0 i=1 i=2。
运行上面程序,将看到i循环到2时即结束,当i等于2时,循环体内遇到break语句,程序跳出循环。
public static void main(String[] args) { for (int i = 0; i < 4; i++) { if (i == 2) { continue; } System.out.print("i=" + i +" "); } }
参考答案
输出结果为:i=0 i=1 i=3
从上面输出结果可以看出, 当i等于2时,程序没有输出i=2,因为程序执行到continue时,忽略了当次循环中continue语句后的代码。
有数列为:9,99,999,...,9999999999。要求使用程序计算此数列的和,并在控制台输出结果。交互效果如图-1所示。
图- 1
另有数列:1+1/2+1/3…+1/n(n>=2)。要求使用交互的方式计算此数列的和:用户在控制台录入需要计算的整数 n 的值,程序计算此数列的和,并在控制台输出结果。程序的交互过程如图-2所示。
图- 2
参考答案
程序需要使用for循环计算数列的和,然后将计算出来的和输出到控制台。
实现此案例需要按照如下步骤进行。
步骤一:定义类及 main 方法
首先定义一个名为 SumOfSeq的类,并在类中定义Java 应用程序的入口方法main ,代码如下所示:
public class SumOfSeq{ public static void main(String[] args) { } }
步骤二:计算第一个数列的和
使用for循环计算数列的和,然后将计算出来的和值输出到控制台。代码如下:
public class SumOfSeq { public static void main(String[] args) { // 数列求和 long nine = 9; long result = nine; for (int i = 2; i <= 10; i++) { nine = nine * 10 + 9; result += nine; } System.out.println("9+99+999+...+9999999999=" + result); } }
步骤三:计算第二个数列的和
新建类SumOfSeq2,以计算第二个数列(1+1/2+1/3…+1/n)的和。代码如下:
import java.util.Scanner; public class SumOfSeq2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入整数(例如10):"); int n = scanner.nextInt(); double result = 0; for (int i = 1; i < n; i++) { result += 1.0 / i; if(i==1){ System.out.print("1+"); }else{ System.out.print("1/" + i + "+"); } } result += 1.0 / n; System.out.print("1/" + n + "=" + result); } }
本案例的完整代码如下所示:
计算第一个数列(9+99+999+...+9999999999)和的完整代码如下所示:
public class SumOfSeq { public static void main(String[] args) { // 数列求和 long nine = 9; long result = nine; for (int i = 2; i <= 10; i++) { nine = nine * 10 + 9; result += nine; } System.out.println("9+99+999+...+9999999999=" + result); } }
计算第二个数列(1+1/2+1/3…+1/n)和的完整代码如下所示:
import java.util.Scanner; public class SumOfSeq2 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入整数(例如10):"); int n = scanner.nextInt(); double result = 0; for (int i = 1; i < n; i++) { result += 1.0 / i; if(i==1){ System.out.print("1+"); }else{ System.out.print("1/" + i + "+"); } } result += 1.0 / n; System.out.print("1/" + n + "=" + result); } }