题目1: * 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个 第二天早上又
* 将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早
* 上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
* -----------------------------------------------------------------------------------------
* 程序分析:采取逆向思维的方法,从后往前推断
*
* 结果正确,没投机取巧满分,不能运行0分
*
* 完成需求 =4分=
*
* 1 (1 + 1) * 2 = 4 (4 + 1) * 2 = 10 (10 + 1) * 2 = 22 ...
*/
public class Test1 {
public static void main(String[] args) {
int sum = 1;
for (int i = 0; i < 9; i++) {
sum = (sum + 1) * 2;
}
System.out.println("猴子第一天摘了" + sum + "个桃子");
}
}
题目2:
* 请在一个类中编写一个方法,这个方法搜索一个字符数组中是否存在某个字符,
* 如果存在,则返回这个字符在字符数组中第一次出现的位置(序号从0开始计算),
* 否则,返回-1。要搜索的字符数组和字符都以参数形式传递传递给该方法,如果
* 传入的数组为null,应抛出IllegalArgumentException异常。
* -----------------------------------------------------------------------------------------
* 在类的main方法中以各种可能出现的情况测试验证该方法编写得是否正确,
* 例如,字符不存在,字符存在,传入的数组为null等。
*
* 结果正确,没投机取巧满分,不能运行0分
*
* 可以返回已有字符出现的位置 =1分=
* 可以返回-1 =1分=
* 能抛出异常 =4分=
*/
public class Test2 {
public static void main(String[] args) {
char[] chs = {'a', 'b', 'c', 'd', 'e', 'f'};
char[] chs2 = null;
System.out.println(getIndex(chs, 'a'));
System.out.println(getIndex(chs, 'h'));
System.out.println(getIndex(chs2, 'a'));
}
/*
* 定义一个方法,用来查找字符在字符数组中出现的索引
* 返回值类型: int
* 参数列表: char[] chs , char ch
*/
public static int getIndex(char[] chs , char ch){
// 判断,如果chs为null 就抛异常
if(chs == null)
// 在方法体内,使用throw关键字,后面跟异常对象
throw new IllegalArgumentException("数组为空!!!");
for (int i = 0; i < chs.length; i++) {
if(chs[i] == ch) {
return i;
}
}
return -1;
}
}
题目3:
* 键盘录入一段字符串,要求使用map集合统计出字符串中字母和数字出现的次数,
* 如果有其他字符则当做*号来统计,最后按指定方式输出(不要求排序)
* 例如录入字符串:aaaabbbcccddd1112233ABC^^^
* 输出的格式为: *(3),1(3),2(2),3(2),a(4),b(3),c(3),d(3)
* (注意:括号前面是字符,里面是次数)
*
* 结果正确,没投机取巧满分,不能运行0分
*
* 将字符串转换成字符数组,并且遍历每一个字符 =1分=
* 将字符和字符出现的个数存入map集合 =5分=
* 没有把其他字符当作*存储 =扣2分=
* 可以按照正确的格式输出 =4分=
* 打印结果末尾有逗号 =扣1分=
*/
public class Test3 {
public static void main(String[] args) {
// 键盘录入
Scanner sc = new Scanner(System.in);
// String line = sc.nextLine();
String line = "aaaabbbcccddd1112233ABC^^^";
//创建一个Map集合
HashMap<Character, Integer> hm = new HashMap<>();
// 把字符串转换成字符数组
char[] chs = line.toCharArray();
// 遍历字符数组
for (char c : chs) {
// 判断是否为字母或者数字
if(c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c >= '0' && c <= '9') {
/*if(!hm.containsKey(c)){
hm.put(c, 1);
}else {
hm.put(c, hm.get(c) + 1);
}*/
hm.put(c, !hm.containsKey(c) ? 1 : hm.get(c) + 1);
}else{
// 无论是什么都当 *
/*if(!hm.containsKey("*")){
hm.put('*', 1);
}else{
hm.put('*', hm.get('*') + 1);
}*/
hm.put('*', !hm.containsKey('*') ? 1 : hm.get('*') + 1);
}
}
String str = map2String(hm);
System.out.println(str);
}
private static String map2String(HashMap<Character, Integer> hm) {
// 创建字符串缓冲区
StringBuilder sb = new StringBuilder();
// 遍历Map集合 通过键获取值的方式
// 输出的格式为: *(3),1(3),2(2),3(2),a(4),b(3),c(3),d(3)
for(Character key : hm.keySet()){
Integer value = hm.get(key);
sb.append(key).append("(").append(value).append("),");
}
return sb.substring(0, sb.length() - 1);
}
}
--题目4:
* 已知User类,该类有name(String类型)和age(int类型)两个属性,
* 请编写代码实现ArrayList<User>排序,
* 要求按照User对象的age的倒序排序。
*
* 结果正确,没投机取巧满分,不能运行0分
*
* 创建完整的User类 =3分=
* 创建几个User的实例存入ArrayList =1分=
* 可以按年龄倒序排序 =6分=
* 实现排序,但是是正序 =扣3分=
*/
public class Test4 {
public static void main(String[] args) {
ArrayList<User> al = new ArrayList<>();
al.add(new User("希尔瓦纳斯", 18));
al.add(new User("希尔瓦纳斯", 19));
al.add(new User("希尔瓦纳斯", 30));
al.add(new User("奥雷莉亚", 20));
al.add(new User("伊利丹", 17));
al.add(new User("古尔丹", 25));
al.add(new User("污妖王", 23));
//创建一个排序方法
// System.out.println(al);
// sort(al);
// Collections.sort(al);
Collections.sort(al , new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
int num = o1.getName().compareTo(o2.getName());
return num == 0 ? o1.getAge() - o2.getAge() : num;
}
});
System.out.println(al);
}
private static void sort(ArrayList<User> al) {
// 选择排序
for (int i = 0; i < al.size() - 1; i++) {
for (int j = i + 1; j < al.size(); j++) {
if(al.get(i).getAge() < al.get(j).getAge()){
User temp = al.get(i);
al.set(i, al.get(j));
al.set(j, temp);
}
}
}
}
}
当然,每道题可能也有不同的解法,欢迎大家踊跃探讨并给出思路(*^__^*) 嘻嘻……
|
|