java面试笔试代码填空 java面试题编程题( 九 )


华为笔试题(4) 2006-09-30 13:00
1. 找错 void test1() {char string[10];char* str1="0123456789";strcpy(string, str1); } 答:表面上并且编译都不会错误 。但如果string数组原意表示的是字符串的话,那这个赋值就没有达到意图 。最好定义为char string[11] , 这样最后一个元素可以存储字符串结尾符'\0'; void test2() {char string[10], str1[10];for(int I=0; I 10;I++){str1[I] ='a';}strcpy(string, str1); } 答:strcpy使用错误,strcpy只有遇到字符串末尾的'\0'才会结束,而str1并没有结尾标志,导致strcpy函数越界访问 , 不妨让str1[9]='\0',这样就正常了 。void test3(char* str1) {char string[10];if(strlen(str1) =10) {strcpy(string, str1); } } 答:这又会出现第一道改错题的错误了 。strlen(str1)算出来的值是不包含结尾符'\0'的,如果str1刚好为10个字符+1结尾符,string就得不到结尾符了 。可将strlen(str1) =10改为strlen(str1) 10 。
2. 找错 #define MAX_SRM 256 DSN get_SRM_no() {static int SRM_no;int I;for(I=0;I MAX_SRM;I++,SRM_no++){SRM_no %= MAX_SRM;if(MY_SRM.state==IDLE){break;}}if(I=MAX_SRM)return (NULL_SRM);elsereturn SRM_no; } 答:我不知道这段代码的具体功能,但明显有两个错误 1 , SRM_no没有赋初值 2,由于static的声明,使该函数成为不可重入(即不可预测结果)函数,因为SRM_no变量放在程序的全局存储区中 , 每次调用的时候还可以保持原来的赋值 。这里应该去掉static声明 。
java面试题求代码,最好有注解 。。。你好,代码如下 。需要修改的话,你可以根据情况修改:
class Info{ // 定义信息类
private String name = "生产者";// 定义name属性
private String content = "压入子弹" ;// 定义content属性
private boolean flag = false ; // 设置标志位
public synchronized void set(String name,String content){
if(!flag){
try{
super.wait() ;
}catch(InterruptedException e){
e.printStackTrace() ;
}
}
this.setName(name) ; // 设置名称
try{
Thread.sleep(300) ;
}catch(InterruptedException e){
e.printStackTrace() ;
}
this.setContent(content) ; // 设置内容
flag= false ; // 改变标志位,表示可以取走
super.notify() ;
}
public synchronized void get(){
if(flag){
try{
super.wait() ;
}catch(InterruptedException e){
e.printStackTrace() ;
}
}
try{
Thread.sleep(300) ;
}catch(InterruptedException e){
e.printStackTrace() ;
}
System.out.println(this.getName() +
" -- " + this.getContent()) ;
flag= true ; // 改变标志位 , 表示可以生产
super.notify() ;
}
public void setName(String name){
this.name = name ;
}
public void setContent(String content){
this.content = content ;
}
public String getName(){
return this.name ;
}
public String getContent(){
return this.content ;
}
};
class Producer implements Runnable{ // 通过Runnable实现多线程
private Info info = null ;// 保存Info引用
public Producer(Info info){
this.info = info ;
}
public void run(){
boolean flag = false ; // 定义标记位
for(int i=0;i12;i++){
if(flag){
this.info.set("生产者","压入子弹") ; // 设置名称
flag = false ;
}else{
this.info.set("消费者","射出子弹") ; // 设置名称
flag = true ;
}
}
}
};
class Consumer implements Runnable{
private Info info = null ;
public Consumer(Info info){
this.info = info ;
}
public void run(){
for(int i=0;i24;i++){
this.info.get() ;
}
}
};
public class ThreadCaseDemo03{

推荐阅读