黑马程序员 训练营入学考试题

public class Test1 {


/**
* 1、 写一个ArrayList类的代理,实现和ArrayList中完全相同的功能,并可以计算每个方法运行的时间。
* 接口:InterfaceProxyArrayLisst 作用:为准确的计算代理类方法运行时间
* ArrayList代理类:ProxyArrayLisst 作用:模拟ArrayList 用于计算代理类每一个方法准确的运行时间:DateMinus

* @param args
*/


public static void main(String[] args) {


// new 一个集合类
InterfaceProxyArrayLisst proxy = new DateMinus();
//模拟向集合中添加数据
for (int i = 0; i < 50; i++) {
proxy.add(i);
}
//移除集合中相应下标的数据
proxy.remove(20);
//取集合中对应下标的数据
for (int i = 0; i < proxy.getLength(); i++) {
System.out.print(proxy.get(i) + " ");
}
System.out.println();
//打印集合长度
System.out.print("length: " + proxy.getLength());


}
}


// ArrayList代理类
class ProxyArrayLisst implements InterfaceProxyArrayLisst {
// 记录实际长度
private int length = 0;
// 用数组模拟ArrayList集合
private Integer[] list = new Integer[10];


// 向集合中添加元素
@Override
public Integer add(Integer element) {
if (element == 15) {
System.out.println("add");
}
if (this.length == 0) {
list[length] = element;
} else if (list.length == this.length) {
Integer[] temp = new Integer[list.length + list.length / 2];
this.list = this.copy(temp, this.list);
list[length] = element;
} else {
this.list[length] = element;
}
return this.list[length++];
}


// 根据index取出集合中值
@Override
public Integer get(int index) {
if (index >= 0 && index < this.length) {
return list[index];
} else {
throw new ArrayIndexOutOfBoundsException();
}
}


// 根据下标移除集合中对应的值
@Override
public Integer remove(int index) {
Integer temp = -1;
if (this.length < 1 || index >= this.length) {
throw new ArrayIndexOutOfBoundsException();
} else if (index == this.length - 1) {
this.length--;
} else {
temp = list[index];
for (int i = index; i < this.length - 1; i++) {
this.list[i] = this.list[i + 1];
}
this.length--;
}
return temp;
}


// 该方法和更加下标移除类似,在这里就不在写出来
@Override
public Integer remove(Integer element) {
return null;
}


// 移除集合中所以数据
@Override
public boolean removeAll() {
this.list.clone();
this.list = new Integer[10];
return true;
}


// 把一个数组中的值拷贝到另一个数组中
protected Integer[] copy(Integer[] temp, Integer[] list) {
for (int i = 0; i < list.length; i++) {
temp[i] = list[i];
}
return temp;
}


public int getLength() {
return length;
}


public void setLength(int length) {
this.length = length;
}


public Integer[] getList() {
return list;
}


public void setList(Integer[] list) {
this.list = list;
}


}


// 计算ArrayList代理类方法运行时间
class DateMinus extends ProxyArrayLisst {


DateFormat df = new SimpleDateFormat("ss");


// SimpleDateFormat date = new SimpleDateFormat("yyyyMMddHHmmssSSS");


//计算模拟ArrayList类中对应方法运行时间
@Override
public Integer add(Integer element) {
long begin = new Date().getTime();
Integer temp = super.add(element);
long end = new Date().getTime();
System.out.println("add()运行时间为:" + df.format(new Date(begin - end))
+ " 毫秒");
return temp;
}


@Override
public Integer get(int index) {
long begin = new Date().getTime();
Integer temp = super.get(index);
long end = new Date().getTime();
System.out.println("get()运行时间为:" + df.format(new Date(begin - end))
+ " 毫秒");
return temp;
}


@Override
public Integer remove(int index) {
long begin = new Date().getTime();
Integer temp = super.remove(index);
long end = new Date().getTime();
System.out.println("remove(index)运行时间为:"
+ df.format(new Date(begin - end)) + " 毫秒");
return temp;
}


@Override
public int getLength() {
long begin = new Date().getTime();
Integer temp = super.getLength();
long end = new Date().getTime();
System.out.println("getLength()运行时间为:"
+ df.format(new Date(begin - end)) + " 毫秒");
return temp;
}


@Override
public Integer[] getList() {
long begin = new Date().getTime();
Integer[] temp = super.getList();
long end = new Date().getTime();
System.out.println("add()运行时间为:" + df.format(new Date(begin - end))
+ " 毫秒");
return temp;
}


}


// 集合代理抽象类
interface InterfaceProxyArrayLisst {
abstract Integer add(Integer element);


abstract Integer get(int index);


abstract Integer remove(Integer element);


abstract Integer remove(int element);


abstract boolean removeAll();


abstract int getLength();

}


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------


public class Test2 {


/**
* 2、 ArrayList<Integer> list = new ArrayList<Integer>();
* 在这个泛型为Integer的ArrayList中存放一个String类型的对象。

* @param args
*/
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
String str = "luoyilan";
Method method;
try {
method = list.getClass().getMethod("add", Object.class);
method.invoke(list, str);
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(list.get(0));
}
}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

public class Test3 {


/**
* 3、 假如我们在开发一个系统时需要对员工进行建模,员工包含 3
* 个属性:姓名、工号以及工资。经理也是员工,除了含有员工的属性外,另为还有一个奖金属性
* 。请使用继承的思想设计出员工类和经理类。要求类中提供必要的方法进行属性访问。


* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub


}


}
//员工类
class PeopleBean {
// 姓名
private String name;
// 工号
private String jobNumber;
// 工资
private float wage;


public String getName() {
return name;
}


public void setName(String name) {
this.name = name;
}


public String getJobNumber() {
return jobNumber;
}


public void setJobNumber(String jobNumber) {
this.jobNumber = jobNumber;
}


public float getWage() {
return wage;
}


public void setWage(float wage) {
this.wage = wage;
}


}
//经理类
class ManagerBean extends PeopleBean {
// 奖金
private float bonus;


public float getBonus() {
return bonus;
}


public void setBonus(float bonus) {
this.bonus = bonus;
}




}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

public class Test4 {


/**
* 4、 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...

* 把26个字符循环一遍
* 每次循环把字符串中字符遍历一般查找相应字符并统计个数

* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//记录在不重复情况下字符个数
int index = 0;
//统计字符窜中每一个字符个数
int length = 0;
int a_ASCII = 65;
boolean boo = false;
String str = "abcdefgf12a35Aaaxyzz";
String[][] arr = new String[26][2];
for (int i = a_ASCII; i < a_ASCII + 32; i++) {
boo = false;
length = 0;
for (int j = 0; j < str.length(); j++) {
String change = ((char) i) + "";
String temp = str.charAt(j) + "";
char test = (char) (temp.charAt(0) - 32);
boolean flag = (change.equals(temp) || change.equals(test+""));
if (flag) {
if (arr[index][0] == null) {
arr[index][0] = temp;
boo = true;
}
length++;
arr[index][1] = length + "";
}


}
if (boo) {
index++;
}
}
for (int i = 0; i < index; i++) {
System.out.print(arr[i][0] + "(" + arr[i][1]+")");
}
}
}


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

public class Test5 {


/**
* 5、 有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常,在ClassA类中有一个方法a,
* 请在这个方法中调用b,然后抛出异常。在客户端有一个类为TestC,有一个方法为c
* ,请在这个方法中捕捉异常的信息。完成这个例子,请说出java中针对异常的处理机制。

* java中针对异常的处理机制: java提供两种处理机制 
* (1)用try...catch语句捕获并且处理异常;
* (2)使用throw抛出异常,异常必须是java.lang.Throwable类的对象或者该类的子类的对象;
* (3)使用throws声明方法抛出异常;
* (4)使用finally语句声明在任何情况下都会执行的代码。
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestC.c();
}


}


class ClassA {
public static void a() throws ArrayIndexOutOfBoundsException {
// throw new ArrayIndexOutOfBoundsException();
ClassB.b();
}
}


class ClassB {
public static void b() {
throw new ArrayIndexOutOfBoundsException();
}
}


class TestC {
public static void c() {


try {
ClassA.a();
} catch (ArrayIndexOutOfBoundsException e) {
// TODO Auto-generated catch block
System.out.println("捕捉异常的信息Arr");
e.printStackTrace();
} catch (Exception e) {
System.out.println("捕捉异常的信息ex");
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

----------------------------------------------------------------------------------------------------------------------------------------------------------------------

public class Test6 {


/**
* 6、 将字符串中进行反转。abcde --> edcba


* @param args
*/
public static void main(String[] args) {
String str = "abcdef";
//把字符串转换成字符串数组
String[] arr = str.split("");
int len = arr.length;
//根据字符串数组长度求交换次数
int loopNumber = len % 2 == 0 ? len / 2 : len / 2 + 1;
System.out.println(len);
for (int i = 1; i < loopNumber; i++) {
String temp = arr[i];
arr[i] = arr[len - i];
arr[len - i] = temp;
}


for (int i = 0; i < len; i++) {
System.out.print(arr[i]);
}
}


}

------------------------------------------------------------------------------------------------------------------------------------------------------------

public class Test7 {


/**
* 7、 把当前文件中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出,例如:

* a: 21 次 b: 15 次 c:: 15 次 把: 7 次 当: 9 次 前: 3 次 ,:30 次

* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// 读取文本内容
// String str = new
// String(" 把当前文件中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出,例如:");
BufferedReader in = new BufferedReader(new FileReader("D:\\luoyilan.txt"));
String str = null;
String s2 = new String();
while ((s2 = in.readLine()) != null)
str += s2 + "\n";// 如果s2不为空,将s2中的读到的每一行换行后给str
in.close();
int len = 0;
while (str.length() > 0) {
len = str.length(); // 获取第一个字符
String s = str.substring(0, 1); // 用空格替换,以便计算这个字符的个数
str = str.replaceAll(s, ""); // 写入文件,加\r\n换行
System.out.print(s + ":出现" + (len - str.length()) + "次\r\n");


}
}
}

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


public class Test8 {


/**
* 8、编写一个程序,获取10个1至20的随机数,要求随机数不能重复。

* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
// 保存生成的数字
int number[] = new int[10];
// 记录生成符合条件的数字个数
int index = 0;
// 记录生成的数字是否符合条件
boolean flag;
while (true) {
flag = true;
int r = new Random().nextInt(20) + 1;
// 遍历数组,判断生成的数是否重复
for (int i = 0; i < index; i++) {
if (r == number[i]) {
flag = false;
break;
}
}
// 如果生成的随机数不重复,则添加到数字中
if (flag) {
number[index++] = r;
}
// 生成的随机数数量足够时跳出循环
if (index == number.length) {
break;
}
}
print(number);


}


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

-----------------------------------------------------------------------------------------------------------------------------------------------------------

public class Test9 {


/**
* 9、
* 在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),
* 否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,如果传入的数组为null,
* 应抛出IllegalArgumentException异常
* 。在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,例如,字符不存在,字符存在,传入的数组为null等。


* @param args
*/
public static void main(String[] args) {
String arr[] = { "a", "b", "c", "d", "e", "f", "g" };
int value = -100;
try {
// value = charAt(arr, 'a');
// value = charAt(arr, 'h');
// value = charAt(arr, ' ');
value = charAt(null, 'h');
} catch (IllegalArgumentException e) {
// TODO: handle exception
System.out.println("catch");
e.printStackTrace();
}
System.out.println(value);


}


private static int charAt(String arr[], char c) {
int status = -1;
if (arr == null) {
throw new IllegalArgumentException();
}
for (int i = 0; i < arr.length; i++) {
if (arr[i].equals(c + "")) {
status = i;
break;
}
}
return status;
}
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

public class Test10 {


/**
* 10、 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:
* 最后剩下的是100人中的第几个人?

* @param args
*/
public static void main(String[] args) {
int people[] = new int[100];
// 统计剩余总人数
int count = people.length;
// 统计移除的人数
int removePeople = 0;
// 记录报数人所报数字
int index = 0;
for (int i = 0; i < people.length; i++) {
people[i] = i + 1;
}
// 如果总人数大于1继续报数
while (count > 1) {
index = 0;
for (int i = 0; i < count; i++) {
index++;
if (index == 14) {
people[i] = people[i+1];
count--;
break;
}


if (i + 1 == count) {
i = -1;
}
}
}


for (int i = 0; i < count; i++) {
System.out.print(" " + people[i]);
}


}
}

1、 ArrayList<Integer> list = new ArrayList<Integer>(); 在这个泛型为Integer的ArrayList中存放一个String类型的对象。 2、 编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。 3、 方法中的内部类能不能访问方法中的局部变量,为什么? 4、 定义一个交通灯枚举,包含红灯、绿灯、黄灯,需要有获得下一个灯的方法,例如:红灯获取下一个灯是绿灯,绿灯获取下一个灯是黄灯。 5、 编写一个类,增加一个实例方法用于打印一条字符串。并使用反射手段创建该类的对象, 并调用该对象中的方法。 6、 把当前文件中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出,例如: a: 21 次 b: 15 次 c:: 15 次 把: 7 次 当: 9 次 前: 3 次 ,:30 次 7、 将字符串中进行反转。abcde --> edcba 8、 编写程序,循环接收用户从键盘输入多个字符串,直到输入“end”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。 9、 写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 10、 28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路)
黑马程序员训练营入学考试题 1、方法中的内部类能不能访问方法中的局部变量,为什么? 2、编写一个类,在main方法中定义一个Map对象(采用泛型),加入若干个对象,然后遍历并打印出各元素的key和value。 3、取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)... 4、有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩),然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。 5、编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 6、编写三各类Ticket、SealWindow、TicketSealCenter分别代表票信息、售票窗口、售票中心。售票中心分配一定数量的票,由若干个售票窗口进行出售,利用你所学的线程知识来模拟此售票过程。 7、写一方法,打印等长的二维数组,要求从1开始的自然数由方阵的最外圈向内螺旋方式地顺序排列。 如: n = 4 则打印: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 ? 8、编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数,然后打印出这个十进制整数对应的二进制形式。这个程序要考虑输入的字符串不能转换成一个十进制整数的情况,并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。提示:十进制数转二进制数的方式是用这个数除以2,余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2,这次得到的余数就是次低位,如此循环,直到被除数为0为止。其实,只要明白了打印出一个十进制数的每一位的方式(不断除以10,得到的余数就分别是个位,十位,百位),就很容易理解十进制数转二进制数的这种方式。 9、28人买可乐喝,3个可乐瓶盖可以换一瓶可乐,那么要买多少瓶可乐,够28人喝?假如是50人,又需要买多少瓶可乐?(需写出分析思路) 10、有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
1.方法中的内部类能不能访问方法中的局部变量,为什么? 2.分析运行结果,说明原理。(没有分析结果不得分) import java.util.ArrayList; class Data { int val; } public class Test { public static void main(String args[]) { Data data = new Data(); ArrayList list = new ArrayList(); for (int i = 100; i < 103; i++) { data.val = i; list.add(data); } for (Data d : list) { System.out.println(d.val); } } } 3.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 4.编写一个类,在main方法中定义一个Map对象(采用泛型), * 加入若干个对象,然后遍历并打印出各元素的key和value。 5.定义一个文件输入流,调用read(byte[] b)方法将exercise.txt * 文件中的所有内容打印出来(byte数组的大小限制为5)。 6.存在一个JavaBean,它包含以下几种可能的属性: 1:boolean/Boolean 2:int/Integer 3:String 4:double/Double 属性名未知,现在要给这些属性设置默认值,以下是要求的默认值: String类型的默认值为字符串 www.itheima.com int/Integer类型的默认值为100 boolean/Boolean类型的默认值为true double/Double的默认值为0.01D. 只需要设置带有getXxx/isXxx/setXxx方法的属性,非JavaBean属性不设置,请用代码实现 7.有一个类为ClassA,有一个类为ClassB,在ClassB中有一个方法b,此方法抛出异常, * 在ClassA类中有一个方法a,请在这个方法中调用b,然后抛出异常。 * 在客户端有一个类为TestC,有一个方法为c ,请在这个方法中捕捉异常的信息。 * 完成这个例子,请说出java中针对异常的处理机制。 8.编写一个程序,获取10个1至20的随机数,要求随机数不能重复。 9.编写一个程序,它先将键盘上输入的一个字符串转换成十进制整数, * 然后打印出这个十进制整数对应的二进制形式。 * 这个程序要考虑输入的字符串不能转换成一个十进制整数的情况, * 并对转换失败的原因要区分出是数字太大,还是其中包含有非数字字符的情况。 * 提示:十进制数转二进制数的方式是用这个数除以2, * 余数就是二进制数的最低位,接着再用得到的商作为被除数去除以2, * 这次得到的余数就是次低位,如此循环,直到被除数为0为止。 * 其实,只要明白了打印出一个十进制数的每一位的方式 * (不断除以10,得到的余数就分别是个位,十位,百位), * 就很容易理解十进制数转二进制数的这种方式。 10.有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。然后其他人重新开始,从1报数,到14退出。 * 问:最后剩下的是100人中的第几个人?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值