五、运算符以及控制结构
运算符
由于JAVA里面的运算符大多数与C语言中的相似,所以在此只需要注意一些跟C语言不同的以及我不太熟悉的运算符。
三元运算符
三元运算符也称三目运算符,它的运算符是“?:”,有三个操作数。操作流程:首先判断条件,如果条件满足,就会赋予一个变量一个指定的内容(冒号之前的),不满足就会赋予变量另外的一个内容(冒号之后的),其操作语法如下:
数据类型 变量=布尔表达式?条件满足设置内容:条件不满足设置内容;
举个例子帮助理解:
public class lianxi
{
public static void main (String args[])
{
int x =10;
int y =20;
int result = x>y?x:y;
System.out.println("1st result = "+result);
x=50;
result=x>y?x:y;
System.out.println("2nd result = "+result);
}
}
运行结果:
由结果可以看到,第一个三元运算符那里判断条件x>y?,此时x是小于y的,故选择y的值给予输出;第二个三元运算符那也是判断条件x>y?,但是前面一行程序给x重新赋值,此时x是大于y的,故选择x的值给予输出。
另外需要注意的是逻辑运算符(&&、||、!)与位运算符(&、|、^、~)的区别。逻辑运算符只对布尔型操作数进行运算并返回一个布尔型数据。也就是说,逻辑运算符的操作数和运算结果只能是真(true)或者假(false)。
&和&&、|和||的区别:
对于“与操作”:有一个条件不满足,结果就是false。普通与(&):所有的判断条件都要执行;短路与(&&):如果前面有条件已经返回了false,不再向后面判断,那么最终结果就是false。
对于“或操作”:有一个条件满足,结果就是true。对于普通或(|):所有的判断条件都要执行;短路或(||):如果前面有条件返回了true,不再向后判断,那么最终结果就是true。
控制结构
JAVA的程序控制结构主要有选择结构、循环结构以及循环的跳转。有之前语言学习的基础,这些控制结构的含义和使用方法已经有了足够了解,所以只需要学习JAVA中这些结构有关语句的语法就行。
if语句:
if(判断条件)
{
语句1
...
语句n
}
if...else语句:
if(条件表达式)
{
语句块1
}
else
{
语句块2
}
switch语句:
switch(表达式)
{
case常量选择值1:语句体1 {break;}
case常量选择值2:语句体2 {break;}
......
case常量选择值n:语句体n {break;}
default:默认语句体
}
while语句:
while(判断条件)
{
语句1;
......
语句n;
}
do...while语句:
do{
语句1;
......
语句n;
}while(判断条件)
for语句:
for(赋初始值;判断条件;增减标志量)
{
语句1;
......
语句n;
}
另外需要注意带标签的continue语句:
continue 标签名;
continue后的标签,必须标识在循环语句之前,使程序的流程在遇到continue之后,立即结束当次循环,跳入标签所标识的循环层次中,进行下一轮循环。
举个例子帮助理解:
public class lianxi
{
public static void main (String args[])
{
for(int i=0;i<2;i++)
{
System.out.println("最外层循环"+i);
loop:
for(int j=0;j<2;j++)
{
System.out.println("中间层循环"+j);
for(int k=0;k<2;k++)
{
System.out.println("最内层循环"+k);
continue loop;
}
}
}
}
}
运行结果:
现在程序输出为10行,如果去掉loop标签,则输出有14行。
那是因为有了loop标签之后,continue语句会使程序跳到loop标签那执行,这样就少执行了最内层循环语句。
return语句可以使程序的流程离开return语句所在的方法,到目前为止所写的程序都只有一个main方法(方法类似于C语言中的函数),所以目前就认为return语句就是使程序结束的语句。
本周的学习就到这里了,为了巩固本周学习的知识,下面做了几个编程题作为实战练习。
实战练习:
1. 随机输入一字母,利用位运算实现该字母的形式转换(小写大写,大写小写),若输入不为字母则报错,且继续输入,直到输入正确。
import java.util.Scanner;
public class lianxi2
{
public static void main(String args[])
{
String a=null;
int c;
Scanner input=new Scanner(System.in);
System.out.println("请输入字母:");
while(true)
{
a = input.next();
char b = a.charAt(0);
if ((b >='a')&&(b<='z'))
{
int d=b;
c=d-32;
b=(char)c;
System.out.println("转化后的字母为:"+b);
break;
}
else if((b>='A')&&(b<='Z'))
{
int d=b;
c=d+32;
b=(char)c;
System.out.println("转化后的字母为:"+b);
break;
}
else
{
System.out.println("输入错误!请重新输入:");
}
}
}
}
运行结果:
2. 随机输入一个年份,判断其是不是闰年。
import java.util.Scanner;
public class lianxi2
{
public static void main(String args[])
{
int a;
int c;
Scanner input=new Scanner(System.in);
System.out.println("请输入一个年份:");
a = input.nextInt();
if(a%100==0)
{
if(a%400==0)
{
System.out.println(a+"年是闰年");
}
else
{
System.out.println(a+"年不是闰年");
}
}
else
{
if(a%4==0)
{
System.out.println(a+"年是闰年");
}
else
{
System.out.println(a+"年不是闰年");
}
}
}
}