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