switch分支结构用于多条件选择,虽然在多条件选择的情况下,也可以使用if...else...结构来实现,但是使用开关语句会使程序更为精炼、清晰。开关语句得格式为:
switch(条件表达式)
{
case 常量表达式1:
语句1
break
case 常量表达式2:
语句2
break
//......
case 常量表达式n:
语句n
break
default:
//
break
}
开关表达式首先计算出条件表达式的值,如果其值等于某个常量表达式,则执行该常量表达式后的语句,如果其值与所有的常量表达式的值不相等,则执行defualt后的语句。
在switch语句中,你通常在每一种case情况后都应使用break语句,否则,第一个相等情况后面所有的语句都会被执行,这种情况叫做落空。你可以试着分别加上去和去掉break语句来执行下面的例子:
class Switch Test
public static void main(String args[])
throws java.io.IOException
char a
System.out.println("Enter a number from 1--3:")
a=(char)System.in.read()
switch(a)
case'1':System.out.println("win a Car!")break
case'2':System.out.println("picked the goat")break
case'3':System.out.println("get to keep your 100")
break
default:System.out.println("entry")
在代码中加break语句后,你应明确知道程序将会发生的变化,并要确认程序没有转移到你不想执行的代码上。
掌握了以上这些基本语句之后,你可以写更加实际点的程序了,下面这个程序计算从终端输入的数字和字符的数量。
class SwitchTest
public static void main (String args[])
throws java.io.IOException
int numberOfDigits=0,numberOfSpaces=0,numberOfOthers=0
char c
while((c=(char)System.in.read())!='')
switch(c)
case'0':
case'1':
...
...
case'8':
case'9':numberOfDigits++break
case' ':numberOfSpaces++break
default:numberOfOthers++break
System.out.println(":")
System.out.println("Number of digits="+numberOfDigits+"")
System.out.println("Number of spaces="+numberOfSpaces+"")
System.out.println("Number of others="+numberOfOthers+"")
代码的while循环从键盘读入字符直至输入一个回车符,循环内部的switch语句先把它和数字比较,当发现相等时,它就使对应的统计变量的值加1,然后break语句结束switch语句,程序回到等待键盘输入的状态。程序中,在default语句中的break是不必要的,不过加上它可以使程序风格保持一致。
//导入 *** 作IO流所要使用的所有类库import java.io.*
//创建字节输入流测试程序
public class InputReaderTest {
//程序入口
public static void main(String[] args) {
//初始化变量i的值等于0,目前没有发现你定义这个i究竟有什么作用
int i = 0
//创建一个文件字节流的对象,因为后面要在catch块中关闭这些流,所以要
//声明到try块的外面,不然后面无法引用
FileInputStream fis = null
//创建文件字节流的对象,初始化为空,原因同上
FileReader fr = null
//使用C盘下java目录下的0404目录下的说明.txt文件创建一个JAVA可以读写
//的File类型的对象
File file=(new File ("C:\\java\\0404\\说明.txt"))
//创建一个字节数组,数组的大小使用所要连接的文件中所包含的字节数目来
//创建,通常不这样 *** 作,往往使用缓冲流来写,则数组的大小就可以固定为
//1KB或者2KB,另外数组的大小是有限的,如果文件过大,这里要报一个异常,
//总体来说,这个设计是一个有问题的设计
byte[] bytes=new byte[(int)file.length()]
//对以下调用过程中会引发异常的语句做异常处理
try {
//初始化fis文件字节流对象,该流具有按字节读取文件的功能
fis = new FileInputStream(file)
//初始化fr文件字符流对象,该流具有按字符读取文件的功能,个人感觉你的
//这个设置没有任何意义, *** 作了这个流就是为了读取这个流,而现在没有使用
//到它,建议删除,或者添加对应的字节数组
fr = new FileReader(file)
//使用文件字节流中的read(byte[] buf)方法,将文件中的所有内容读入到前
//面声明的bytes数组中
fis.read(bytes)
//将数组中的内容创建成一个字符串对象,并在屏幕上输出出来
System.out.println(new String(bytes))
//以下两句为关闭对应的流,这些语句往往放入到finally语句块中
fis.close()
fr.close()
}
//如果文件没有找到,触发以下异常
catch (FileNotFoundException fe){
//显示没有找到文件
System.out.println("找不到指定文件")
//退出JAVA虚拟机
System.exit(-1)
}
//如果引发IO *** 作异常,触发以下异常
catch (IOException ioe) {
//显示文件读取错误
System.out.println("文件读取错误")
//退出JAVA虚拟机
System.exit(-1)
}
//显示 *** 作成功
System.out.println("OK,,,")
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)