现在的位置: 首页 > 综合 > 正文

java几道笔试编程题

2013年01月21日 ⁄ 综合 ⁄ 共 3250字 ⁄ 字号 评论关闭

前些日子辞职了,准备换个单位工作,参加了几家公司的笔试,记录下了面试涉及到的几道程序题,分享如下:

1.求1~100之间的质数(素数)

public class ZhiShuDemo {
  public static void main(String[] args) {
     //循环100以内的数
     for (int n=1;n<=100;n++){
       //给b初始值true
       boolean b = true;
       //如果循环拿到的数n不等于1,就进入下面循环
       if (n != 1 ){
         //i从大于1的第一个数也就是2开始,一次循环到比这个数n本身小的最大的数
         //何为质数,除了1和他本身不能再被其他数整除。所以...这样循环
         for (int i = 2; i < n; i++){
            if (n % i == 0){//如果取余为0,也就是除了1和其本身有其他数可以乘除他,所以置为false
            b = false;
            //跳出当前循环,判断是否打印,并且到外面循环继续
            break;
           }
  
         }
       }
       //如果b为true打印下面的质数
       if (b && n>1){
        System.out.println(n + "是质数");
       }
     }
  }
}

 

2.题目:打印出100-999之间所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

public class ShuiXianShu {
 public static void main(String[] args) {
  int gewei, shiwei, baiwei = 0;
  for (int i = 100; i <= 999; i++) {
   baiwei = i / 100;
   shiwei = (i - baiwei * 100) / 10;
   gewei = i - baiwei * 100 - shiwei * 10;
   if (Math.pow(gewei, 3) + Math.pow(shiwei, 3) + Math.pow(baiwei, 3) == i) {
    System.err.println(i);
   }
  }
 }
}

3.冒泡排序

public class MaoPaoSort {
 /*
  * 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,
  * 大数放后
  * 。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后
  * 。在第二趟
  * :仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数
  * (倒数第一的位置上已经是最大的
  * ),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
  * 由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
  * 用二重循环实现,外循环变量设为i,内循环变量设为j。假如有10个数需要进行排序
  * ,则外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的
  * ,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,j的值依次为1,2,...10-i。
  */
 public static void sort(int a[]) {
  int temp;
  for (int i = 0; i < a.length - 1; i++) {
   for (int j = 0; j < a.length - i - 1; j++) {
    if (a[j] > a[j + 1]) {
     temp = a[j];
     a[j] = a[j + 1];
     a[j + 1] = temp;
    }
   }
  }
 }

 public static void print(int a[]) {
  for (int i = 0; i < a.length; i++) {
   System.err.print(a[i] + " ");
  }
 }

 public static void main(String[] args) {
  int[] a = { 5, 3, 1, 9, 7, 13, 11, 17, 15, 19 };
  sort(a);
  print(a);
 }
}

4.有一个字符串"123ABC",如能输出成"CBA321"

 

public class PringtString {
 
 //方法1,通过StringBuffer的reverse()方法
 public static void print1(String str) {
  StringBuffer sb = new StringBuffer();
  sb.append(str);
  System.out.println("转换后的字符串1:"+sb.reverse());
 }
 //方法2,通过String的toCharArray()方法逆向输出
 public static void print2(String str) {
  char c[] = str.toCharArray();
  System.out.print("转换后的字符串2:");
  for (int i = c.length-1; i >=0; i--) {
   System.out.print(c[i]);
  }
 }
 public static void main(String[] args) {
  String str = "123ABC";
  System.out.println("转换前的字符串:"+str);
  print1(str);
  print2(str);
 }
}

 

5.单例模式

 

饿汉式

class Singleton {

  private static Singleton instance=new Singleton(); 

  private Singleton(){}  static Singleton getInstance() { 

     return instance;

  }

}

懒汉式

class Singleton {

  private static Singleton instance=null; 

  private Singleton(){}

  static Singleton getInstance() {  

    if(instance==null)     

         instance=new Singleton();     

    return instance; 

   }

}

 

6.求以下程序的输出结果

public class TestMianshi {
 /**
  * @param str
  */
 public static void chargeStr(String str){
  str = "webcome";
 }
 
 public static void main(String[] args) {
  String str = "1234";
  chargeStr(str);
  System.err.println(str);
 }
}

 

本题答案1234

 

 

7.求以下程序的输出结果

 

public class TestMianshi2 {
 static boolean foo(char c){
  System.out.print(c);
  return true;
 }
 
 public static void main(String[] args) {
  int i = 0;
  for (foo('A');foo('B')&&(i<2);foo('C')) {
   i++;
   foo('D');
  }
 }
}

知道for循环的执行顺序即可知道答案

//输出结果为ABDCBDCB

 

 

 

 

 

抱歉!评论已关闭.