System.out.println("args["+i+"]="+args[i]);
}
}
}
2.上机运行下列程序,注意观察输出的结果。
//认识Unicode字符集,因此Java代码中可以出现汉字,但不建议使用。
publicclassUnicodeTest{
publicstaticvoidmain(Stringargs[]){
for(int汉字编码=20302;汉字编码<=20322;汉字编码++)
System.out.print((char)汉字编码);
}
}
3.填充、运行下面程序,并注意观察输出的结果。
//输出英文字母表,了解原始数据类型间的相互转换
publicclassEnglish{
publicstaticvoidmain(Stringargs[]){
intstartPosition=0,endPosition=0;
charcStart=‘a’,cEnd=‘z’;
代码1//把cStart转换成int类型,并将结果赋给startPosition
代码2//把cEnd转换成int类型,并将结果赋给endPosition
System.out.println(“英文字母共有:
”+endPosition-startPosition+1+”个”);
for(inti=startPosition,i<=endPosition,i++){
charc=‘\0’;
代码3//把i转换成char类型,并将结果赋给c
System.out.println(“”+c);
}
}
}
请修改、补充上述程序使其能够输出俄文、日文等字母表。
4.填充、运行下面程序,并注意观察输出的结果。
//猜数游戏,让学生了解循环及分支语句
importjava.util.*;
publicclassGuessNumber{
publicstaticvoidmain(Stringargs[]){
System.out.println(“给你一个1至100之间的整数,请猜猜这个数”);
intrealNumber=(int)(Math.random()*100)+1;
intyourGuess=0;
Scannerreader=newScanner(System.in);
System.out.println(“输入你的猜测:
”);
代码4//reader调用方法获取用户从键盘输入的整数,并赋给yourGuess
while(代码5){
if(代码6){
System.out.println(“大了,请继续:
”);
代码7//reader调用方法获取用户输入的整数,并赋给yourGuess
}elseif(代码8){
System.out.println(“小了,请继续:
”);
代码9//reader调用方法获取用户输入的整数,并赋给yourGuess
}
}//endofwhile
System.out.println(“猜对了!
”);
}
}
了解并掌握Scanner类及其对象的使用。
5.填充、运行下面程序,并注意观察输出的结果。
//用switch结构实现两个数据的和、差、积、商的运算,让学生了解多条件分支语句。
importjava.io.*;
publicclassCalculator{
publicstaticvoidmain(Stringargs[])throwsIOException{
intx=10,y=5,z;
charch;//变量ch用来存放从键盘输入的字符
代码段10//从键盘输入+、-、*、/赋给变量ch
//下面用switch结构实现计算器的功能
switch(代码11){
case'+':
z=x+y;
System.out.println("x+y="+z);//'+'时输出x+y的值
break;
case'-':
z=x-y;
System.out.println("x-y="+z);//'-'时输出x-y的值
break;
case'*':
z=x*y;
System.out.println("x*y="+z);//'*'时输出x*y的值
break;
case'/':
z=x/y;
System.out.println("x/y="+z);//'/'时输出x/y的值
break;
default:
System.out.println("InputError!
");
//输入其它字符时提示出错
}
}
}
可以有几种不同的方法从键盘输入数据?
6.优化下面的程序
//实现对数组元素的快速查找,通过该例加强学生对数组的掌握,并了解Arrays类的功能(利用Arrays类的静态方法sort()可以轻松实现对数组的快速排序)。
importjava.util.*;
publicclassSortFind{
publicstaticvoidmain(Stringargs[]){
intn=0,start,end,middle;
System.out.println(“从键盘输入一个整数,程序将判断该数是否在一个数组中”);
inta[]={12,34,56,78,31,154,-11,99,101};
Arrays.sort(a);
Scannerreader=newScanner(System.in);
while(reader.hasNextInt()){
n=reader.nextInt();
start=0;
end=a.length;
middle=(start+end)/2;
intcount=0;
while(n!
=a[middle]){
if(n>a[middle])
start=middle;
else
end=middle;
middle=(start+end)/2;
count++;
if(count>a.length/2)
break;
}
if(count>a.length/2)
System.out.println(“:
”+n+“不在是数组中”);
else
System.out.println(“:
”+n+“是数组中的元素”);
}//endofouterwhile
System.out.println(“你输入的数据不是整数”);
}//endofmain
}//endofclass
7.仔细阅读下面程序,并分别尝试在版本1.4和1.5以上的jdk中调试并注意观察结果。
//了解JDK1.5中的新增特性---自动装包和拆包
publicclassTest2{
publicstaticvoidmain(Stringargs[]){
Booleanb=newBoolean(“TRUE”);
if(b){
for(Integeri=0;i<10;++i)
System.out.println(i);
}
}
}
Java的每一个原始数据类型都对应有它们的包装类,如int的包装类是Integer,float的包装类是Float,char的包装类是Character等。
原始数据类型和它们的包装类分别适用于不同的场合,如要进行算数运算应使用原始数据类型的数据,要实现原始数据类型的数据与其它类型的转换应使用相应包装类中的方法。
但为了简化代码编写JDK1.5提供了一新的特性---自动装包和拆包,实现原始数据类型与包装类间的自动转换。
自动装包指Java编译器会自动的把原型类型的数据按照需要包装成为对象类型,自动拆包就是把对象类型的数据根据需要自动转换成原型类型数据的过程。
8.仔细阅读、填充、运行下面程序,并注意观察输出的结果。
importjava.util.*;
publicclassDemoStringTokenizer{
publicstaticvoidmain(Stringargs[]){
Strings="sheisagoodteacher!
";
StringTokenizerfenxi=代码12//空格或逗号做分隔符
intnumber=代码13//统计可分隔的单词数
while(代码14){//判断是否还有未提取的单词
Stringstr=代码15;//取下一个单词
System.out.println(str);
System.out.println("还剩"+fenxi.countTokens()+"个单词");
}
System.out.println("s共有单词"+number+"个");
}
}
利用字符串对象的split()方法重写上面程序。
9.下面程序的功能是将一个字符串中的小写字母变成大写字母,将大写字母变成小写字母。
阅读、填充并运行下面程序。
importjava.util.*;
publicclassTransform{
publicstaticvoidmain(Stringargs[]){
Strings=newString("abcABC123");
System.out.println(s);
chara[]=代码16;
for(inti=0;iif(代码17)//如果是小写
a[i]=Character.toUpperCase(a[i]);
elseif(Character.isUpperCase(a[i]))
代码18;//转换为小写
}
s=newString(a);
System.out.println(s);
}
}
10.根据下面注释的要求将程序补充完整,并上机运行。
通过该例熟悉Java的String类提供的各种字符串操作方法。
classStringExample{
publicstaticvoidmain(Stringargs[]){
Strings1=newString("youareastudent"),
s2=newString("howareyou");
if(代码19){//判断s1与s2是否相同
System.out.println("s1与s2相同");
}else{
System.out.println("s1与s2不相同");
}
Strings3=newString("61030219851022024");
if(代码20){//判断s3的前缀是否是“610”
System.out.println("陕西省的身份证");
}
Strings4=newString("你"),s5=newString("我");
if(代码21){//按照字典顺序比较s4与s5
System.out.println("按字典序s4大于s5");
}else{
System.out.println("按字典序s4小于s5");
}
intposition=0;
Stringpath="c:
\\java\\jsp\\A.java";
position=代码22//获取path中最后出现目录分隔符号的位置
System.out.println("c:
\\java\\jsp\\A.java中最后出现\\的位置:
"+position);
StringfileName=代码23//获取path中“A.java”子字符串
System.out.println("c:
\\java\\jsp\\A.java中含有的文件名:
"+fileName);
Strings6=newString("100"),s7=newString("123.678");
intn1=代码24//将s6转化成int型数据
doublen2=代码25//将s7转化成double型数据
doublen=n1+n2;
System.out.println(n);
Strings8=newString("ABCDEF");
chara[]=代码26//将s8存放到数组a中
for(inti=a.length-1;i>=0;i--){
System.out.printf("%3c",a[i]);
}
}
}
2.5习题
一、选择题
1.声明inta=10;请判断下面3个运算中不能通过Java编译器。
a.a=a/2; b.a=a/3; c.a=a*2.89;d.都不能
2.下面赋值语句中错误的是。
a.floatf=23.1fb.doubled=2.3E12c.charc=‘\r’d.bytebb=445
3.设a=8,则表达式a>>>1的值是。
a.1b.2c.3d.4
4.下面会产生编译错误的语句是。
a.floatf=65.0fb.doubled=65.0c.byteb=300d.c=65
5.对于以下代码,变量result的可声明的类型为。
byteb=11;
shorts=13;
result=b*++s;
a.byte,short,int,long,float,doubleb.boolean,byte,short,int,long,float,double
c.byte,short,char,int,long,float,doubled.int,long,float,double
6.表达式(short)10/10.2*2的运算结果是类型。
a.shortb.intc.doubled.float
7.表达式5.4+”3.2”的运算结果是。
a.double型的8.6b.String型的”8.6”c.long型的8d.String型的”5.43.2”
8.下面程序段的结果。
publicclassTemp{
publicstaticvoidmain(Stringargs[]){
System.out.println(3.0/0);
}
}
a.编译失败b.运行期异常
c.打印输出Infinityd.java.lang.ArithmeticException异常抛出
9.publicclassTest{
publicstaticvoidmain(Stringargs[]){
try{
doublex=64.0,y=0.0;
System.out.println(x%y==x%y);
}catch(Exceptione){
System.out.println(“Exception”);
}
}
}
a.编译失败b.运行期异常c.打印输出trued.打印输出false
10.下面程序插入语句后程序可正常运行。
publicclassTest{
publicstaticvoidmain(Stringargs[]){
;
switch(x){
default:
System.out.println(“Hereitis!
”);
}
}
}
a.intx=6b.shortx=3;c.charx=’y’d.longx=4L
11.阅读下面的程序,描述正确的是。
publicclassMan{
staticintarr[]=newint[10];
publicstaticvoidmain(Stringa[]){
System.out.println(arr[1]);
}
}
a.编译时将发生错误 b.编译时正确但是运行时出错
c.输出为0d.输出为null
二、判断下面程序片段的对错,并指出相应的错误。
1.publicclassTest1{
privatefinalintI=10;
privatebytek=I;
publicstaticvoidmain(Stringargs[]){
System.out.println(k);
}
}
2.publicclassTest1{
publicstaticvoidmain(Stringargs[]){
for(i=0;j=0,i<10;++i,j+=i){
k+=i*j+j*j;
}
}
}
3.for(inti=0;i<10;i++){
if(x[i]>100)break;
if(x[i]<0)continue;
x[i+1]=x[i]+x[j]
}
4.while(x>>2){
x*=y
}
5.if(x++){
y=x*z;
x/=2;
}
else{
y=y*y;
++z;
}
6.publicclassTest2{
publicstaticvoidmain(Stringargs[]){
Booleanb=newBoolean(“TRUE”);
if(b){
for(Integeri=0;i<10;++i){
System.out.println(i);
}
}
}
}
//上面程序请基于jdk1.4以下版本回答问题
7.publicclassTest2{
publicstaticvoidmain(Stringargs[]){
intx=3,y=1;
if(x=y)
System.out.println(“Theyareequal”);
}
}
8.switch(i==10){
case‘1’:
i++
case“2”
i--;
case3:
i*=5;
default:
i%=3;
}
9.publicclassTest{
publicstaticvoidmain(Stri