华为的两道java笔试题
[*]设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
[*]以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。
[*]public class ThreadTest1{
[*]private int j;
[*]public static void main(String args[]){
[*]ThreadTest1 tt=new ThreadTest1();
[*]Inc inc=tt.new Inc();
[*]Dec dec=tt.new Dec();
[*]for(int i=0;i<2>
[*]Thread t=new Thread(inc);
[*]t.start();
[*]t=new Thread(dec);
[*]t.start();
[*]}
[*]}
[*]private synchronized void inc(){
[*]j++;
[*]System.out.println(Thread.currentThread().getName()+"-inc:"+j);
[*]}
[*]private synchronized void dec(){
[*]j--;
[*]System.out.println(Thread.currentThread().getName()+"-dec:"+j);
[*]}
[*]class Inc implements Runnable{
[*]public void run(){
[*]for(int i=0;i<100>
[*]inc();
[*]}
[*]}
[*]}
[*]class Dec implements Runnable{
[*]public void run(){
[*]for(int i=0;i<100>
[*]dec();
[*]}
[*]}
[*]}
[*]}
[*]编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
[*]
[*] 答:代码如下:
[*]
[*]package test;
[*]
[*]class SplitString {
[*] String SplitStr;
[*] int SplitByte;
[*] public SplitString(String str,int bytes) {
[*] SplitStr=str;
[*] SplitByte=bytes;
[*] System.out.println("The String is:'"+SplitStr+"';SplitBytes="+SplitByte);
[*] }
[*]
[*] public void SplitIt() {
[*] int loopCount;
[*] loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/SplitByte+1);
[*] System.out.println("Will Split into "+loopCount);
[*] for (int i=1;i<=loopCount ;i++ ) {
[*] if (i==loopCount){
[*] System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
[*] } else {
[*] System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
[*] }
[*] }
[*] }
[*]
[*] public static void main(String[] args) {
[*] SplitString ss = new SplitString("test中dd文dsaf中男大3443n中国43中国人0ewldfls=103",4);
[*] ss.SplitIt();
[*] }
[*]}
[*]
页:
[1]