本帖最后由 一直很安静 于 2013-11-26 10:29 编辑
问题1:下面的程序if(buf<0&& !bChineseFirstHalf)中的buf<0是什么意思?为什么要这样写?
/*3、编写一个截取字符串的函数,输入为一个字符串和字节数,输出
为按字节截取的字符串,
* 但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,
* 应该输出“我ABC”,而不是“我ABC+汉的半个”。
*/
public class Test6{
public static void main(String[] args) throws Exception{
String str ="我a爱中华abc我爱传智def";
//String str ="我ABC汉";
int num =trimGBK(str.getBytes("GBK"),5);
System.out.println(str.substring(0,num));
}
public static int trimGBK(byte[] buf,int n){
int num = 0;
boolean bChineseFirstHalf = false;
for(int i=0;i<n;i++)
{
if(buf<0&& !bChineseFirstHalf){//此处
bChineseFirstHalf= true;
}else{
num++;
bChineseFirstHalf= false;
}
}
return num;
}
}
问题2:for(inti=0,int j=a.length-1;i<j;i++,j--)是否等效于for(int i=0;i<a.length/2;i++)呢
问题3:在张孝祥老师的视频中听到了工厂模式,在网上查了下,根据工厂模式实现的类可以根据提供的数据生成一组类中的某一类的实例,通常这一组类有一个公共的抽象方法并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作,首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法,然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪个子类的实例。
觉得这样的叙述太抽象了 还是想不明白,工厂模式有没有类似单例模式那样的代码?谁能用简单的代码给演示一下?
问题4:线程池
Executors的newScheduledThreadPool方法是创建一个线程池,这个线程池对象可以接收一个Runnable子类,我看着和new Thread(new Runnable())差不多,想问一下1.5出现的线程池和之前的线程有什么区别没用?用法是不是和原来一样,还有如果我这个线程池中有多个线程该怎样让这多个线程运行起来?老方法是new多个Thread然后把Runable的子类传给他们,用线程池的话怎么做?让线程池对象调用多次scheduleAtFixedRate方法吗?
问题5:下面是JDK中提供的ScheduledExecutorService演示代码,请教各位他实现将蜂鸣控制在1小时内是怎么实现的?是不是可以用相同的办法将银行调度系统控制在只在固定时间运行?或者一天运行多长时间?
以下是一个带方法的类,它设置了 ScheduledExecutorService ,在 1 小时内每 10 秒钟蜂鸣一次:
import static java.util.concurrent.TimeUnit.*;
class BeeperControl {
private final ScheduledExecutorService scheduler =
Executors.newScheduledThreadPool(1);
public void beepForAnHour() {
final Runnable beeper = new Runnable() {
public void run() { System.out.println("beep"); }
};
final ScheduledFuture<?> beeperHandle =
scheduler.scheduleAtFixedRate(beeper, 10, 10, SECONDS);
scheduler.schedule(new Runnable() {
public void run() { beeperHandle.cancel(true); }
}, 60 * 60, SECONDS);
}
} |