java编程题全集题及答案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

java编程题全集题及答案
J a v a程序设计总复习题1、编写一个Java程序,用if-else语句判断某年份是否为
闰年。

(分支)
//ProgrammeNameLeapYear.java
publicclassLeapYear{
publicstaticvoidmain(Stringargs[]){
intyear=2010;
if(args.length!=0)
year=Integer.parseInt(args[0]);
if((year%4==0&&year%100!=0)||(year%400==0))
年是闰年。

");
else
年不是闰年。

");
}
}//if-else语句
2、编写一个Java程序在屏幕上输出1!+2!+3!+ (10)
的和。

(循环)
//programmenameForTest.java
publicclassForTest{
publicstaticvoidmain(Stringargs[]){
inti,j,mul,sum=0;
for(i=1;i<=10;i++){
mul=1;
for(j=1,j<=i;j++){
mul=mul*j;
}
sum=sum+mul;
}
“1!+2!+3!+……+10!=”+sum);
}
}
3、依次输入10个学生成绩,判断学生(优秀、良好、中等、
及格、不及格)并计算人数(switch)
4、使用冒泡排序(数组)
publicclass BubbleSort{
publicstaticvoid main(String[]args){ int[]array={63,4,24,1,3,5};
BubbleSortsorter=new BubbleSort();
sorter.sort(array);
}
//冒泡排序
publicvoid sort(int[]array){
for(int i=1;i<array.length;i++)< bdsfid="103" p=""></array.length;i++)<>
for(int j=0;j<array.length-1;j++){< bdsfid="105" p=""></array.length-1;j++){<>
if(array[j]>array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
showArray(array);
}
//遍历数组,并输出数组的元素。

publicvoid showArray(int[]array){
for(int i=0;i<array.length;i++){< bdsfid="117" p=""></array.length;i++){<>
System.out.print(array[i]+"\t");
System.out.println();
}
}
5、实现会员注册,要求用户名长度不小于3,密码长度不小
于6,注册时两次输入密码必须相同(字符串)
import
publicclass Register{
String name;
String password;
String newPassword;
///////////
publicvoid nameExe(){
Scannerinput=new Scanner(System.in);
System.out.println("请输入用户名,密码和验证密码");
System.out.print("用户名:");
name=input.next();
System.out.print("密码:");
password=input.next();
System.out.print("验证密码:");
newPassword=input.next();
while(name.length()<3||(password.equals(newPassword)==f a lse)
||(password.length()<6)){
if(name.length()<3){
System.out.println("用户名不能小于3");
}
if((password.equals(newPassword)==false)||password.lengt h()<6){
System.out.println("两次输入密码不一样或密码不能小于6位");
System.out.println("\n"+"请重新输入");
System.out.print("用户名:");
name=input.next();
System.out.print("密码:");
password=input.next();
System.out.print("验证密码:");
newPassword=input.next();
}
System.out.println("注册成功!");
}
}
publicclass Verify{
publicstaticvoid main(String[]args){
Registerm1=new Register();
/doc/6b2112294.html,Exe();
}
}
6、一个景区根据游人的年龄收取不同价格的门票。

请编写游
人类,根据年龄段决定能够购买的门票价格并输出,然后写出测试类测试该类(类的基本实现)
publicclass Tourist{
int age;
int ticketPrice;
publicvoid setAge(int age){
this.age=age;
}
publicvoid ticket(){
if(age>0&&age<12)
ticketPrice=20;
elseif(age<20)
ticketPrice=40;
elseif(age<50)
ticketPrice=80;
else
ticketPrice=35;
System.out.println("门票价格:"+ticketPrice);
}
}/////
import
publicclass Test{
publicstaticvoid main(String[]args){
Scannerinput=new Scanner(System.in);
Touristt1=new Tourist();
System.out.print("请输入年龄:");
t1.setAge(input.nextInt());
t1.ticket();
}
}
7、(1)编写一个圆类Circle,该类拥有:
①一个成员变量
Radius(私有,浮点型);//存放圆的半径;
②两个构造方法
Circle()//将半径设为0
Circle(doubler)//创建Circle对象时将半径初始化为r
③三个成员方法
doublegetArea()//获取圆的面积
doublegetPerimeter()//获取圆的周长
voidshow()//将圆的半径、周长、面积输出到屏幕
(2)编写一个圆柱体类Cylinder,它继承于上面的Circle 类。


拥有:
①一个成员变量
doublehight(私有,浮点型);//圆柱体的高;
②构造方法
Cylinder(doubler,doubleh)//创建Circle对象时将半径初始化为r
③成员方法
doublegetVolume()//获取圆柱体的体积
voidshowVolume()//将圆柱体的体积输出到屏幕
编写应用程序,创建类的对象,分别设置圆的半径、圆柱体的高,计算并分别显示圆半径、圆面积、圆周长,圆柱体的体积。

//ProgrammeNameTestCylinder.java
classCircle{//定义父类--园类
privatedoubleradius;//成员变量--园半径
Circle(){//构造方法
radius=0.0;
}
Circle(doubler){//构造方法
radius=r;
}
doublegetPerimeter(){//成员方法--求园周长
return2*Math.PI*radius;
}
doublegetArea(){//成员方法--求园面积
returnMath.PI*radius*radius;
}
voiddisp(){//成员方法--显示园半径、周长、面积
}
}
classCylinderextendsCircle{//定义子类--圆柱类
privatedoublehight;//成员变量--园柱高
Cylinder(doubler,doubleh){//构造方法
super(r);
hight=h;
}
publicdoublegetVol(){//成员方法--求园柱体积
returngetArea()*hight;
}
publicvoiddispVol(){//成员方法--显示园柱体积
}
}
publicclassTestCylinder{//定义主类
publicstaticvoidmain(String[]args){//主程入口
CircleCi=newCircle(10.0);//生成园类实例
Ci.disp();//调用园类的方法
CylinderCyl=newCylinder(5.0,10.0);//生成圆柱类实例
Cyl.disp();//调用父类方法
Cyl.dispVol();//调用子类方法
}
}
8、编写一个Java应用程序,从键盘读取用户输入两个字符
串,并重载3个函数分别实现这两个字符串的拼接、整数相加和浮点数相加。

要进行异常处理,对输入的不符合要求的字符串提示给用户,不能使程序崩溃。

(异常处理)//programmenameStrinput.java
importjava.io.*;
publicclassStrinput
{
publicstaticvoidmain(Stringargs[]){
Strings1=null,s2=null,ss,si,sf;
inti1,i2;
floatf1,f2;
BufferedReaderstrin=newBufferedReader(newInputStreamR eader(Syste m.in));
try{("输入第一个字符串:");
s1=strin.readLine();
("输入第二个字符串:");
s2=strin.readLine();}
catch(Exceptione){
i1=Integer.parseInt(s1);
i2=Integer.parseInt(s2);
f1=Float.parseFloat(s1);
f2=Float.parseFloat(s2);
ss=strAdd(s1,s2);
si=strAdd(i1,i2);
sf=strAdd(f1,f2);
("输入的二个字符串相加结果为:"+ss);
("输入字符串转换为整数相加结果为:"+si);
("输入字符串转换为浮点数相加结果为:"+sf);
}
staticStringstrAdd(Stringstr1,Stringstr2){
returnstr1+str2;
}
staticStringstrAdd(intint1,intint2){
returnString.valueOf(int1+int2);
}
staticStringstrAdd(floatflt1,floatflt2){
returnString.valueOf(flt1+flt2);
}
}
9、应用FileInputStream类,编写应用程序,从磁盘上读取
一个Java程序,并将源程序代码显示在屏幕上。

(被读取的文件路径为:E:/myjava/Hello.java)
//ProgrammeNameFISDemo.java
importjava.io.*;
publicclassFISDemo{
publicstaticvoidmain(Stringargs[]){
byte[]buf=newbyte[2056];
try{
FileInputStreamfileIn=newFileInputStream("e:/myjava/Hello. java") ;
intbytes=fileIn.read(buf,0,2056);
Stringstr=newString(buf,0,bytes);
}catch(Exceptione){
e.printStackTrace();
}
}
10、编写一个Java程序将当100,101,102,103,104,105个数
以数组的形式写入到Dest.txt文件中,并以相反的顺序读出显示在屏幕上。

(文件)
import java.io.*;
publicclass IODemo{
publicstaticvoid main(Stringargs[]){
int data[]={100,101,102,103,104,105};
int[]t=newint[200];
try{
//Filefile=newFile("dest.txt");
DataOutputStreamout=new DataOutputStream(new FileOutputStr eam("dest.txt"));
for(int i=0;i<data.length;i++)< bdsfid="315"
p=""></data.length;i++)<>
out.writeInt(data[i]);写入
out.close();
DataInputStreamin=new DataInputStream(new FileInputStream( "dest.txt"));
//先读出来再倒序输出
for(int i=0;i<data.length;i++){< bdsfid="321" p=""></data.length;i++){<>
t[i]=in.readInt();
}
for(int i=data.length-1;i>=0;i--){
System.out.print(""+t[i]);
}
/*for(inti=data.length-1;i>=0;i--){
t=in.readInt(data[i]);
"+t);
}*/
System.out.println();
in.close();
}catch(IOExceptione)
{
System.out.println(e.getMessage());}
}
}
11、编写一个Java程序实现多线程,在线程中输出线程的名
字,隔300毫秒输出一次,共输出20次。

//programmenameTestThread;
//声明一个子线程类Threaddemo;
classThreadDemoextendsThread{
publicThreadDemo(Stringstr){
super(str);
}
publicvoidrun(){
for(inti=0;i<20;i++){
“”+this.getName());
Try{
Sleep(300);
}catch(InterruptedExceptione){
Return;
}
}
“/end”);
}
}
publicclassTestThread{
publicstaticvoidmain(Stringargs[]){
ThreadDemothread1=newThreadDemo(“T1”);
ThreadDemothread2=newThreadDemo(“T2”);
ThreadDemothread3=newThreadDemo(“T3”);
thread1.start();
thread2.start();
thread3.start();
}
}
10.编写程序,在屏幕上显示带标题的窗口,并添加一个按钮。

当用户单击按钮时,结束程序。

(窗体编程)
//ProgrammeNameButtonEventDemo.java
importjavax.swing.*;
import
publicclassButtonEventDemoextendsJPanelimplementsActio
nListener{ protectedJButtonb1; //声明一个按钮对象
publicButtonEventDemo(){ //构造方法
ImageIconButtonIcon=newImageIcon("images/green.png"); //创建按钮的图标对象
b1=newJButton("退出按钮",ButtonIcon); //生成按钮对象
b1.setMnemonic(KeyEvent.VK_E);//设置b1的助记符是Alt+E b1.setToolTipText("这是退出按钮。

"); //设置按钮提示条
this.add(b1);//往面板对象中加载按钮
b1.addActionListener(this);//本类对象注册为按钮的事件监听器}
publicvoidactionPerformed(ActionEvente){ //按钮事件响应方法
System.exit(0);//按b1则退出主程序
}
privatestaticvoidcreateGUI(){//创建窗体
JFrame.setDefaultLookAndFeelDecorated(true);//设置java隐含观感JFrameframe=newJFrame("按钮测试");//生成应用程序主窗体
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭时隐含操作
ButtonEventDemoCPane=newButtonEventDemo();//生成主类对象--面板
CPane.setOpaque(true);//面板要求不透明
frame.setContentPane(CPane);//设置主类对象为主窗体的内容面板
frame.pack();//主窗体紧缩显示
frame.setVisible(true);//设置主窗体可见
}
publicstaticvoidmain(String[]args){//将createGUI()列入线程
Runnable(){
publicvoidrun(){
createGUI();
}
});
}
}
12、定义一个表示学生信息的类Student,要求如下:(有关类的编程)
(1)类Student的成员变量:
sNO 表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩。

(2)类Student带参数的构造方法:
在构造方法中通过形参完成对成员变量的赋值操作。

(3)类Student的方法成员:
getNo():获得学号;
getName():获得姓名;
getSex():获得性别;
getAge()获得年龄;
getJava():获得Java课程成绩
(4)根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

//PragrammenameStudent;
publicclass Student{
StringsNO,sName,sSex;
int sAge,sJava;
public Student(StringXH,StringXM,StringXB,int NL,int XF){
super();
sNO=XH;
sName=XM;
sSex=XB;
sAge=NL;
sJava=XF;
}
public StringgetNO(){
return sNO;
}
public StringgetName(){
return sName;
}
public StringgetSex(){
return sSex;
}
publicint getAge(){
return sAge;
}
publicint getJava(){
return sJava;
}
publicstaticvoid main(String[]args){
Student[]st=new Student[5];
st[0]=new Student("09zc01","张三","男",19,94);
st[1]=new Student("09zc02","李四","男",20,85);
st[2]=new Student("09zc03","王五","女",18,96);
st[3]=new Student("09zc04","赵六","男",17,90);
st[4]=new Student("09zc05","杨七","女",21,88);
int max=0,min=100,sum=0;
System.out.println("学生信息:");
for(int i=0;i<st.length;i++){< bdsfid="450"
p=""></st.length;i++){<>
if(st[i].sJava<min)< bdsfid="452" p=""></min)<>
min=st[i].sJava;
if(st[i].sJava>max)
max=st[i].sJava;
sum=sum+st[i].sJava;
System.out.println("学生编号:"+st[i].getNO()+",姓名:"+st[i].getName()+",性别:"+st[i].getSex()+",年龄:"+st[i].getAge()+",Java课学分:"+st[i].getJava());
}
System.out.println();
System.out.println("共有学生:"+st.length+",平均成绩:"+sum/st.length);
System.out.println("最小学分:"+min+",最大学分:"+max);
}
}
Java基础
1.九种基本数据类型的大小,以及他们的封装类
2.Switch可以用的参数种类.
3.Object有哪些公用方法?
4.HTTP缓存.
5.Java的四种引用,强弱软虚,用到的场景.
6.Hashcode的作用以及原理,Hash的算法:开放地址法和链地址法的对比.Hash扩容及加载因子的介绍.rehash过程等.
7.ArrayList,LinkedList,Vector的区别.
8.String,StringBuffer与StringBuilder的区别.
9.Map,Set,List,Queue,Stack的特点与用法.
10.HashMap和HashTable的区别.要深层理解,不只是线程安全,
还有Hash算法的区别.
11.HashMap和ConcurrentHashMap的区别,HashMap的底层
12.TreeMap,HashMap,LindedHashMap的区别.
13.Collection包结构,与Collections的区别.
14.try?catch?finally,try里有return,finally还执行么?
15.Excption与Error包结构.非检查异常你遇到过哪些情况,检查异常你遇到过哪些情况.
16.Java面向对象的三个特征与含义.以及面向对象的五个原则.
17.Override和Overload的含义去区别.
18.Interface与abstract类的区别,应用场景.
19.Static?class?与non?static?class的区别.
20.java多态的实现原理.
21.实现多线程的两种方法:Thread与Runable.以及wait,join,notify 等的使用.
22.线程同步的方法:sychronized,lock,reentrantLock,Condition 等.
23.锁的等级:方法锁,对象锁,类锁.
24.写出生产者消费者模式.用阻塞队列和不用的情况.
25.ThreadLocal的设计理念与作用.
26.ThreadPool用法与优势.
27.Concurrent包里的其他东西:ArrayBlockingQueue,CountDownLatch等等.
28.wait()和sleep()的区别.
29.foreach与正常for循环效率对比.
30.Java?IO.
31.反射的作用于原理.
32.泛型常用特点.
33.XML与JSON的对比.
34.Java与C\++对比.
35.设计模式的六大原则.总开闭原则.
36.常用设计模式的DEMO和介绍:单例,工厂,适配器,责任链,观察
37.Servlet非常重要,要完整的说出声明周期.
这个我推荐大家多百度看大牛博客文档,比看书快.
JVM
1.内存模型以及分区,需要详细到每个区放什么.
2.堆里面的分区:Eden,survival?from?to,老年代,各自的特点.
3.对象创建方法,对象的内存分配,对象的访问定位.
4.GC的两种判定方法:引用计数与引用链.
5.GC的三种收集方法:标记清除,标记整理,复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?
6.GC收集器有哪些?
7.Minor?GC与Full?GC分别在什么时候发生?
8.ClassLoader介绍.
9.类加载的五个过程:加载,验证,准备,解析,初始化.
10.双亲委派模型:Bootstrap?ClassLoader,Extension?ClassLoader,ApplicationClas s Loader.
11.分配:静态分配与动态分配.
操作系统
1.进程和线程的区别.
2.死锁的各种知识点,要非常熟悉.
3.内存管理方式:段存储,页存储,段页存储.
4.进程的几种状态.
5.进程几种通信方式.
6.什么是虚拟内存以及实现.
7.虚拟地址,逻辑地址,线性地址,物理地址的区别.
8.线程与进程的同步方式.
TCP/IP
1.OSI与TCP/IP各层的结构与功能,都有哪些协议.
2.TCP与UDP的区别.
3.TCP报文结构.
4.TCP的三次握手与四次挥手过程,各个状态名称与含义,TIMEWAIT的作用以及为甚么出现TIMEWAIT以及握手交换的信息.
5.TCP拥塞控制.
6.TCP滑动窗口与连续ARQ协议.
7.Http的报文结构.
8.Http的状态码含义.
9.Http?request的几种类型.
10.HTTP缓存.
11.Http怎么处理长连接.
12.Cookie与Session的作用于原理.禁用Cookie怎么用session,处理大并发量怎么设计Session比较好.
13.输入一个网页访问,整个过程是怎么样的:从DNS,HTTP,TCP,OSPF,IP,ARP等方面回答.
14.Ping的整个过程.Traceroute的整个过程,从TTL方面回答.
15.Socket通信.
16.IP地址分类.
17.路由器与交换机区别.
数据结构与算法
1.链表与数组.
2.队列和栈,出栈与入栈.
3.链表的删除,插入,反向.
4.字符串操作.
5.Hash表的hash函数,冲突解决方法有哪些.
6.各种排序:冒泡,选择,插入,希尔,归并,快排,堆排,桶排,基数的原理,平均时间复杂度,最坏时间复杂度,空间复杂度,是否稳定.
7.快排的partition函数与归并的Merge函数.
8.对冒泡与快排的改进.
9.二分查找,以及其应用.
10.二叉树,B+树,A VL树,红黑树,哈夫曼树(可以选择掌握,比较难).
11.二叉树的前中后续遍历:递归与非递归写法,层序遍历算法.非递归写法和深度广度优先遍历很重要.
12.数组矩阵的各种花式打印.
13.KMP算法.
14.排列组合问题.
15.动态规划,贪心算法,分治算法.(比较难,算法基础扎实的同学可以选择掌握)
16.大数据处理,怎么设计,TOP-K问题怎么解决.
算法其实很重要,每次面试生杀大计基本可以说是算法,就算你没答好问题,算法写得好也很加分,因为最终都是要你写代码的.。

相关文档
最新文档