3.1 语句及程序结构
3.1.1 语句
语句用来向计算机系统发出操作指令。程序由一系列语句组成。
Java语言中的语句主要分为以下5类:
(1)表达式语句
Java语言中最常见的语句是表达式语句,形式:
表达式;
即在表达式后加一个分号就构成表达式语句。功能是计算表达式的值。分号是语句的分隔符。例:
total = math + phys + chem;
(2)空语句
空语句只有分号,没有内容,不执行任何操作。设计空语句是为了语法需要。例:
循环语句的循环体中如果仅有一条空语句,表示执行空循环。
(3)复合语句
复合语句是用花括号“{}”将多条语句括起来,在语法上作为一条语句使用。例:
{
z = x + y;
t = z / 10;
}
(4)方法调用语句
方法调用语句由方法调用加一个分号组成。例:
System.out.println("Java Language");
(5)控制语句
控制语句完成一定的控制功能,包括选择语句,循环语句和转移语句。
2.程序控制结构
面向过程程序设计和面向对象程序设计是软件设计方法的两个重要阶段,这两种程序设计思想并不是对立的,而是延续和发展的。结构化程序设计的基本思想是采用“单入口单出口”的控制结构,基本控制结构分为3种:顺序结构,选择结构和循环结构。
3.1.2 顺序结构
顺序结构是最简单的一种程序结构,程序按照语句的书写次序执行。
例1:计算太阳和地球之间的万有引力(顺序结构)
public class Force {
public static void main(String[] args) {
double g,mSun,mEarth,f; //万有引力常数,太阳和地球的质量,太阳和地球之间的万有引力
g = 6.66667E-8;
mSun = 1.987E33;
mEarth = 5.975E27;
f = g*mSun*mEarth/(1.495E13*1.495E13);
System.out.println("The Force = "+f);}
}
例2:将华氏度转化成摄氏度(顺序结构)
public class Conversion {
public static void main(String args[]){
float f,c;
f = 70.0f;
c = 5*(f-32)/9;
System.out.println("Fahrenheit = "+f);
System.out.println("Centigrade = "+c);
}
}
3.1.3 选择结构
程序中有些程序段的执行是有条件的,当条件成立时,执行一些程序段;当条件不成立时,执行另一些程序段,或不执行,称为选择结构程序。
3.3.1 if语句
例1:输入两个整数,输出最小者(选择结构)
public class MinNum {
public static void main(String args[]){
int x,y,min;
x = Integer.parseInt(args[0]);
y = Integer.parseInt(args[1]);
if (x<y){
min = x;
}else if(x>y){
min = y;
}else {
System.out.println("相等");
return; //不写返回语句会出现min没有初始值的错误,添加返回或者给min一个初值
}
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("min="+min);
}
}
例2:if语句嵌套
public class Function {
public static void main(String[] args) {
// 有一个x和y的函数关系
float x,y = 0;
x = Float.parseFloat(args[0]);
if (x < 0) {
y = 0;
}else if (x>0&&x<=10) {
y = x;
}else if (x>10&&x<=20) {
y = 10;
}else if (x>20) {
y = (-0.5f)*x+20;
}
System.out.println("x="+x);
System.out.println("y="+y);
}
}
3.3.2 switch语句
当要从多个分支中选择一个分支去执行时,虽然可以使用嵌套的if语句,但是当嵌套层太多时会造成程序的可读性差。switch语句能够根据给定表达式的值,从多个分支中选择一个分支来执行。
例:将百分制成绩转化为优秀,良好,中等,及格和不及格的5级制成绩
public class Level {
public static void main(String[] args) {
short newGrade=0,grade;
grade = Short.parseShort(args[0]);
switch(grade/10) {
case 10:
case 9:newGrade = 1;break;
case 8:newGrade = 2;break;
case 7:newGrade = 3;break;
case 6:newGrade = 4;break;
default:newGrade = 5;
}
System.out.println(grade);
switch(newGrade) {
case 1:System.out.println("优秀");break;
case 2:System.out.println("良好");break;
case 3:System.out.println("中等");break;
case 4:System.out.println("及格");break;
default: System.out.println("不及格");
}
}
}
3.4 循环结构
3.4.1 while语句
while语句的特点是先判断,后执行。
例:计算10的阶乘
public class Factorial {
public static void main(String[] args) {
int i = 1;
double s = 1;
while(i<=11) {
s = s*i;
i = i+1;
}
System.out.println("10!="+s);
}
}
3.4.2 do...while语句
do...while循环先执行,后判断。
例:1-99奇数和
public class Sum1 {
public static void main(String[] args) {
int i = 1,sum = 0;
do{
sum = sum+i;
i = i+2;
}while(i<=99);
System.out.println("sum="+sum);
}
}
3.4.3 for语句
for(表达式1;表达式2;表达式3){
循环体
}
例:计算1-100之间的整数和
public class Sum3 {
public static void main(String[] args) {
int i = 1,sum = 0;
for(i = 1;i<=100;i++) {
sum += i;
}
System.out.println("sum = "+sum);
}
}
3.4.4 多重循环
循环嵌套既可以是一种循环语句的自身嵌套,也可以是不同种循环语句的相互嵌套。循环嵌套时,要求内循环完全包含在外循环之内,不允许出现相互交叉。
例:求2-50之间的素数
public class Prime2 {
public static void main(String args[]) {
System.out.println("Prime numbers between 2 and 50 : ");
for(int k = 2;k<=50;k++) {
boolean flag = true;
for(int i = 2;i<k;i++) {
if(k%i==0) {
flag = false;
break;
}
}
if(flag) {
System.out.print(k+" ");
}
}
}
}
3.5 跳转语句
3.5.1 break语句
break语句用于switch语句或while,do...while,for循环语句,如果程序执行到break语句,则立即从switch语句或循环语句退出。
3.5.2 continue语句
continue语句用于while,do...while,for语句的循环体中,如果程序执行到continue语句,则结束本次循环,回到循环条件处,判断是否执行下一次循环。
练习:
1.假如有一根3000米长的绳子,每天减去一半,问需要几天绳子的长度会短于5米?
public class Practice9 {
public static void main(String[] args) {
int l = 3000;
int days = 0;
do {
l /=2;
days++;
}while(l>=5);
System.out.println("需要 "+days+" 天");
}
// 1500 750 375 187 93 46 23 11 5 2
}
2.求所有的水仙花数(指其个位,十位和百位3个数的平方和等于这个三位数本身)
public class Practice10 {
public static void main(String[] args) {
int gw,sw,bw;
boolean hasOutput = false;
for(int number = 1;number<=999;number++) {
gw = number % 10;
sw = number % 100 / 10;
bw = number / 100;
int Narcissisticnumber = gw*gw*gw+sw*sw*sw+bw*bw*bw;
if (Narcissisticnumber == number) {
if (!hasOutput) {
System.out.print("水仙花数:");
hasOutput = true;
}
System.out.print(number + " ");
//输出结果只有一次“水仙花数:”
}
}
}
}