0
5.Java中标准输入输出使用哪种系统类、使用哪个对象和方法?
【答】:
通过系统类java.lang.System达到访问标准输入输出的功能。
System类管理标准输入输出流和错误流,有以下三个对象:
1)System.out:
把输出送到默认的显示(通常是显示器)。
常使用输出的方法有print()、
println()等。
2)System.in:
从标准输入获取输入(通常是键盘)。
常实现输入处理的方法有read()、skip()等;
3)System.err:
把错误信息送到默认的显示。
常见方法有print()、println()、write()等。
6.阅读下列程序,写出运行结果。
(1).
publicclassExample0401{
publicstaticvoidmain(String[]args){
for(intx=0;x<10;x++){
inty=x*x+x+41';
System.out.println("\t"+x+"\t"+y);
}
}
}
(2).菲波拉契数列:
publicclassExample02{
publicstaticvoidmain(String[]args){
System.out.print(0)
intfib0=0;
intfib1=1;
intfib2=fib0+fib1
while(fib2<100){
fib0=fib1;
fib1=fib2;
fib2=fib1+fib0;
System.out.print(","+fib1);
}
}
}
(3).产生0~20的随机整型,然后计算并打印它的结果:
importjava.util.Random;
publicclassExample03{
publicstaticvoidmain(String[]args){
Randomrandom=newRandom();
floatx=random.nextFloat();
intn=Math.round(21*x);
longf=1;
intk=1;
do
f*=k++;
while(k<=n);
System.out.println(n+"!
="+f);
}
}
(4).三重循环:
publicclassExample05{
publicstaticvoidmain(String[]args){
for(inti=0;i<3;i++){
resume:
for(intj=0;j<3;j++){
for(intk=0;k<3;k++){
System.out.println("\n"+i+""+j+'"+k);
if(i==1&&k==0)breakresume;
}
System.out.println("\tEndofkloop;j="+j);
}
System.out.println("\tEndofjloop;i="+i);
}
System.out.println("\tEndofiloop.")
}
}
【答】:
(1)的运行结果如下:
041
143
247
353
461
571
683
797
8113
9131
(2)的运行结果如下:
0,1,2,3,5,8,13,21,34,55,89
(3)的运行结果如下:
运行结果取决于随机数。
求随机数的阶乘,其中的一个运行结果如下:
3!
=6
(4)的运行结果如下:
000
001
002
Endofkloop;j=0
010
011
012
Endofkloop;j=1
020
021
022
Endofkloop;j=2
Endofjloop;i=0
100
Endofjloop;i=1
200
201
202
Endofkloop;j=0
210
211
212
Endofkloop;j=1
220
221
222
Endofkloop;j=2
Endofjloop;i=2
Endofiloop.
7.分析下面两个三重循环程序之间的差别,写出结果,然后上机进行检验。
(1).三重循环1:
publicclassExample01{
publicstaticvoidmain(String[]args){
intcount=0;
for(inti=0;i<3;i++)
resume:
for(intj=0;j<4;j++)
for(intk=0;k<5;k++){
++count;
if(i==1&&j==2&&k==3)breakresume;
}
System.out.println("\tcount="+count);
}
}
(2).三重循环2:
publicclassExample02{
publicstaticvoidmain(String[]args){
intcount=0;
for(inti=0;i<3;i++){
resume:
for(intj=0;j<4;j++)
for(intk=0;k<5;k++){
++count;
if(i==1&&j==2&&k==3)breakresume;
}
System.out.println("\tcount="+count);
}
}
}。
【答】:
在三重循环1中,System.out.println()语句是在三重循环之外的,输出的是count的最后的值,而三重循环2中,System.out.println()语句在循环体内,输出的是每次循环后count发生变化的值。
三重循环1的运行结果是:
count=54
三重循环2的运行结果是:
count=20
count=34
count=54
习题三
1.Java程序中字符串常量使用什么类表示?
字符串变量又使用什么类来表示?
它们的主要区别在哪里?
【答】:
字符串常量常用java.lang.String类表示,字符串变量常用java.lang.StringBuffer类来表示。
它们的主要区别在于:
String对象一旦创建不会发生变化,具有只读性质;而StringBuffer对象创建后可扩充和修改字符串对象的内容。
2.请说明程序“Strings1="Ilike";s1+="Java!
";”和程序“StringBuffers1=newStringBuffer("Ilike");s1.append("Java!
");”的区别。
根据你得出的结论,如果程序需要处理大量的字符串连接操作,应该尽量使用String类还是StringBuffer类?
【答】:
程序“Strings1="Ilike";s1+="Java!
";”中,s1表示字符串变量,在执行第一次运算时,s1赋值一个字符串对象“Ilike”,而第二次运算,s1被赋值另一个字符串对象“IlikeJava”,二次运算中赋值的对象完全不同。
而对于程序“StringBuffers1=newStringBuffer("Ilike");s1.append("Java!
");”,变量s1在两次运算中始终表示一个字符串对象,只是这个字符串对象的内容发生了变化。
程序在处理大量的字符串连接操作,尽量使用StringBuffer类的对象来处理。
这是因为StringBuffer对象可以扩充和修改字符串对象,有利于减少系统资源的消耗。
3.编写一个Applet,使之能将定长字符串转化成可变长字符串,并能实现字符串中指定字符的替换。
【答】:
Applet的程序如下:
packagejavabook.answer.ch03;
importjavax.swing.JApplet;
importjava.awt.*;
publicclassDemo3extendsJApplet{
/**
*字符串替换操作
*
*/
publicvoidinit(){
try{
str=this.getParameter("str");
strR=newStringBuffer(str);
pch=this.getParameter("ch1").charAt(0);
tch=this.getParameter("ch2").charAt(0);
}catch(Exceptione){
System.out.println("初始化数据出现错误!
");
}
for(inti=0;iif(strR.charAt(i)==pch){//替换
strR.setCharAt(i,tch);
}
}
}
publicvoidpaint(Graphicsg){
g.drawString("原来的字符串:
"+str,20,20);
g.drawString("替换后的字符串:
"+strR,120,120);
}
privateStringstr;
privateStringBufferstrR;
privatecharpch;
privatechartch;
}
对应的HTML的文件如下:
关于字符串替换