2个面试题~

让晚风吹 2009-03-25 03:54:58
1、一个字符串,用逗号分隔许多整数,比如: "14,2, 13,4,5,6,7,8,9,11,3"输出为这样的字符窜(连续的数字用’-’表示),比如 "2-9,11,13-14";
2、有一个坛子(Set<Ball> crock),里面装有很多重量颜色不同的球(class Ball {private String color; private int weight; } ) ,一个人想要从坛子里面拿到某种颜色某个重量的球Set<String> holdBalls,一次只能拿出一个球,直到拿到了这个球为止(颜色相同,重量相同或者重量接近且最轻)!
要求实现目的: 1.编程实现寻找球的过程!
2. 编写测试代码证明你的代码是正确的!

比如:坛子有三个球,分别是Ball(Black,1KG) ,Ball(Black,21KG) ,Ball(Red,15KG),
如果我需要拿Ball(black,1KG) , 可以找到Ball(black,1KG) ,因为坛子有这个球
如果我需要拿Ball(black,2KG) , 可以找到Ball(black,1KG) ,因为Ball(black,1KG)最接近Ball(black,2KG)
如果我需要拿Ball(black,11KG) , 可以找到Ball(black,1KG) ,因为Ball(black,1KG) 和 Ball(black,21KG)
最接近Ball(black,11KG) ,而且Ball(black,1KG)比Ball(black,21KG)轻
如果我需要拿Ball(black,18KG) , 可以找到Ball(black,21KG) ,因为因为Ball(black,21KG)最接近Ball(black,11KG)
如果我需要拿Ball(Red,2KG) , 可以找到Ball(Red,15KG)
如果我需要拿Ball(Blue,15KG) , 找不到合适的球

代码实例: 以下代码没有上机测试,只是帮助理解题意!可能存在错误,请自行参考更正!
//pojo
public class Ball{
private String color;
private int weight;
//省略get,set method!
}

//具体业务
public class BallManager{
private Set<Ball> crock; // 一个坛子
private Set<String> holdBalls; //想要取得的球
public Map<String,Ball> getBalls(){
// 返回的Map<String,Ball>,keys 为 holdBalls , values 为找到的球
// 请写出具体的代码

}
}
//测试
public class BallManagerTest extends junit.framework.TestCase{
public void testgetBall1(){
//构造坛子,里面的数据我以例子里面的数据
Set<Ball> crock = new HashSet<Ball>();
Ball ball_black1 = new Ball("BLACK",1);crock.add(ball_black1);
Ball ball_black21 = new Ball("BLACK",21);crock.add(ball_black21);
Ball ball_red15 = new Ball("RED",15);crock.add(ball_red15);

//构造想要取得的球
Set<String> holdBalls = new HashSet<String>();
holdBalls.add("black1");
holdBalls.add("black2");
holdBalls.add("blue15");

//调用业务
BallManager ballManager = new BallManager();
ballManager.setCrock(crock);
ballManager.setHoldBalls(holdBalls);
Map<String,Ball> res = ballManager.getBalls();
System.out.println("res.size(): " + res.size());

//测试结果!
//比较Ball("BLACK",1);
Ball b1 = new Ball("BLACK",1); //正确结果,测试者构造
Ball b2 = res.get("black1"); //程序得到结果
System.out.println(check(b1 ,b2)); //为true,表示测试成功

//比较Ball("BLUE",15);
b1 = null; //正确结果,测试者构造
b2 = res.get("blue15"); //程序得到结果

System.out.println(check(b1 ,b2)); //为true,表示测试成功

// 省略,自行补上!
b1 = new Ball("BLACK",21); //正确结果,测试者构造
b2 = res.get("black2"); //程序得到结果

System.out.println(check(b1 ,b2)); //为true,表示测试成功

}
private boolean check(Ball b1 , Ball b2){
if(b1==null && b2==null) {
return true;
}else if(b1==null || b2==null){
return false;
}else{
return b1.getColor().equalsIgnoreCase(b2.getColor()) && b1.getWeight()==b2.getWeight();
}
}
}

...全文
246 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
superymts 2009-03-26
  • 打赏
  • 举报
回复
学习!
ameyume 2009-03-26
  • 打赏
  • 举报
回复
package com;

import java.util.ArrayList;
import java.util.List;

public class SerialNumber {

/**
* pai xu
* @param str
* @return
*/
public List<Integer> paiXu(String str) {
List<Integer> listInt = new ArrayList<Integer>();
String[] strArray = str.split(",");
try{
for(String s : strArray) {
listInt.add(Integer.parseInt(s));
}
} catch (Exception e) {
e.printStackTrace();
}

for(int i = 0; i < listInt.size() - 1; i++) {
for(int j = i + 1; j < listInt.size(); j++) {
int temp;
if (listInt.get(i) > listInt.get(j)) {
temp = listInt.get(i);
listInt.set(i, listInt.get(j));
listInt.set(j, temp);
}
}
}

return listInt;
}

/**
* Output string
* @param listInt
* @return
*/
public String outString(List<Integer> listInt) {
StringBuilder desStr = new StringBuilder();
boolean bLianxu = false;

if (listInt.size() > 0) {
desStr.append(listInt.get(0));

for(int i = 1; i < listInt.size(); i++) {
if ( (listInt.get(i - 1) + 1 == listInt.get(i)) && !bLianxu) {
desStr.append("-");
bLianxu = true;
}

if (i < listInt.size() - 1) {
if ( (listInt.get(i - 1) + 1 == listInt.get(i))
&& (listInt.get(i) + 1 == listInt.get(i + 1)) ) {
continue;
}

if ( (listInt.get(i - 1) + 1 == listInt.get(i))
&& (listInt.get(i) + 1 != listInt.get(i + 1)) ) {
desStr.append(listInt.get(i));
bLianxu = false;
} else {
desStr.append("," + listInt.get(i));
bLianxu = false;
}
} else {
if (listInt.get(i - 1) + 1 == listInt.get(i)) {
desStr.append(listInt.get(i));
} else {
desStr.append("," + listInt.get(i));
}
}
}
}

return String.valueOf(desStr);
}

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

String str = "14,2,13,4,5,6,7,8,9,11,3";

List<Integer> listInt = new ArrayList<Integer>();

listInt = sn.paiXu(str);

System.out.println(listInt);
System.out.println(sn.outString(listInt));
}

}

输出结果
[2, 3, 4, 5, 6, 7, 8, 9, 11, 13, 14]
2-9,11,13-14
qinqinhao 2009-03-26
  • 打赏
  • 举报
回复
ding
gyheihei 2009-03-25
  • 打赏
  • 举报
回复
Mark!
aniude 2009-03-25
  • 打赏
  • 举报
回复
public static void main(String[] args) {
String test = "14,2,13,4,5,6,7,8,9,11,3";
List<Integer> list = new ArrayList<Integer>();
for (String str : test.split(",")) {
list.add(Integer.valueOf(str));
}


Collections.sort(list, new Comparator<Integer>() {
public int compare(Integer int1, Integer int2) {
return int1 - int2;
}
});

int i = 0;
Integer[] arr1 = list.toArray(new Integer[list.size()]);
for (; i < arr1.length; i++) {
System.out.print(arr1[i]);
if (i+1 <arr1.length) {
if (arr1[i+1] - (arr1[i]) == 1) {
System.out.print("-");
} else {
System.out.print(",");
}
}
}
}

out:
2-3-4-5-6-7-8-9,11,13-14
jdjourney 2009-03-25
  • 打赏
  • 举报
回复
基本上面试当场要写出来是很难的,大脑会打结滴~~
djswzw 2009-03-25
  • 打赏
  • 举报
回复
这个学习中!!
FFDFDD 2009-03-25
  • 打赏
  • 举报
回复
学习
iider2 2009-03-25
  • 打赏
  • 举报
回复
先谢谢5楼

另外第一题的意思应该是2,3,4...9这些连续数,用2-9来代替
chun0746 2009-03-25
  • 打赏
  • 举报
回复
你给出的代码并未体现(给出那个重量接近且最轻) 而是说重量相等
b1.getColor().equalsIgnoreCase(b2.getColor()) && b1.getWeight()==b2.getWeight();

meteor57 2009-03-25
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 iider2 的回复:]
谁有《Eclipse插件开发 方法与实战》 随书源码http://topic.csdn.net/u/20090325/15/db9767b0-ed13-4910-b787-24eb05a7a0f8.html
[/Quote]
帮你找找.

连续的数字用’-’表示
比如 "2-9,11,13-14";
1
2-9也叫连续?

2
输出要不要排序?
iider2 2009-03-25
  • 打赏
  • 举报
回复
突然发现自己傻了,完全没必要用Comparator

第二题实在没什么可写的。

顺便打个广告 谁有《Eclipse插件开发 方法与实战》 随书源码http://topic.csdn.net/u/20090325/15/db9767b0-ed13-4910-b787-24eb05a7a0f8.html
50分送上
iider2 2009-03-25
  • 打赏
  • 举报
回复
第一题是先按从小到大排序,然后遍历一遍就可以了

以下是代码,不过有两个小bug,一是连续的话“-”太多,二是如果没有连续的情况下会出现重复。不过加个状态应该都能解决。

import java.util.*;

public class ddd {

private int[] nums = {14,2,13,4,5,6,7,8,9,11,3};
private List<Integer> list;

public ddd(){
list = new ArrayList<Integer>();
for(int i=0;i<nums.length;i++){
list.add(nums[i]);
}
}

private void execute(){
Collections.sort(list,new num_comparator());
int temp = list.get(0);
StringBuffer sb = new StringBuffer(temp+"");
for(int i=1;i<list.size();i++){
if(list.get(i)-temp==1){
sb.append("-");
}else{
sb.append(temp+","+list.get(i));
}
temp = list.get(i);
System.out.println(i+":"+sb.toString());
}
sb.append(list.get(list.size()-1));
System.out.println(sb.toString());

}

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new ddd().execute();
}

private class num_comparator implements Comparator<Integer>{

@Override
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
if(o1.intValue()>o2.intValue()){
return 1;
}else if(o1.intValue()<o2.intValue()){
return -1;
}
return 0;
}

}

}
lisl2003 2009-03-25
  • 打赏
  • 举报
回复
Mark
昨日,11.19,最新整理了,第61-80题,现在公布上传。 另加上之前公布的第1-60 题,在此做一次汇总上传,以飨各位。 可以这么说,绝大部分的面试题,都是这100 道题系列的翻版, 此微软等公司数据结构+算法面试100 题系列,是极具代表性的经典面试题。 而,对你更重要的是,我自个还提供了答案下载,提供思路,呵。 所以,这份资料+答案,在网上是独一无二的。 ------------------------------------ 整理资源,下载地址: 答案系列: 1.[最新答案V0.3 版]微软等数据结构+算法面试100 题[第21-40 题答案] http://download.csdn.net/source/2832862 2.[答案V0.2 版]精选微软数据结构+算法面试100 题[前20 题]--修正 http://download.csdn.net/source/2813890 //此份答案是针对最初的V0.1 版本,进行的校正与修正。 3.[答案V0.1 版]精选微软数据结构+算法面试100 题[前25 题] http://download.csdn.net/source/2796735 题目系列: 4.[第一部分]精选微软等公司数据结构+算法经典面试100 题[1-40 题] http://download.csdn.net/source/2778852 5.[第1 题-60 题汇总]微软等数据结构+算法面试100 题 http://download.csdn.net/source/2826690 更多资源,下载地址: http://v_july_v.download.csdn.net/ 若你对以上任何题目或任何答案,有任何问题,欢迎联系我: My E-mail: zhoulei0907@yahoo.cn ------------- 作者声明: 本人July 对以上公布的所有任何题目或资源享有版权。转载以上公布的任何一题, 或上传百度文库资源,请注明出处,及作者我本人。 向你的厚道致敬。谢谢。 ---July、2010 年11 月20 日。 ------------------------------------------------------ 各位,若对以上100题任何一道,或对已上传的任何一题的答案, 有任何问题,请把你的思路、想法,回复到此帖子上, 微软等100题系列,永久维护地址(2010年11.26日): http://topic.csdn.net/u/20101126/10/b4f12a00-6280-492f-b785-cb6835a63dc9.html
作者:July、阿财。 时间:二零一一年十月十三日。 ------------------------------ 无私分享造就开源的辉煌。 今是二零一一年十月十三日,明日14日即是本人刚好开博一周年。在一周年之际,特此分享出微软面试 全部100题答案的完整版,以作为对本博客所有读者的回馈。 一年之前的10月14日,一个名叫July 的人在一个叫csdn 的论坛上开帖分享微软等公司数据结构+算法 面试100题,自此,与上千网友一起做,一起思考,一起解答这些面试题目,最终成就了一个名为:结构之法 算法之道的编程面试与算法研究并重的博客,如今,此博客影响力逐步渗透到海外,及至到整个互联网。 在此之前,由于本人笨拙,这微软面试100题的答案只整理到了前60题(第1-60题答案可到本人资源下 载处下载:http://v_july_v.download.csdn.net/),故此,常有朋友留言或来信询问后面40题的答案。只是 因个人认为:一、答案只是作为一个参考,不可太过依赖;二、常常因一些事情耽搁(如在整理最新的今年 九月、十月份的面试题:九月腾讯,创新工场,淘宝等公司最新面试十三题、十月百度,阿里巴巴,迅雷搜狗 最新面试十一题);三、个人正在针对那100题一题一题的写文章,多种思路,不断优化,即成程序员编程 艺术系列。自此,后面40题的答案迟迟未得整理。且个人已经整理的前60题的答案,在我看来,是有诸多问 题与弊端的,甚至很多答案都是错误的。 互联网总是能给人带来惊喜。前几日,一位现居美国加州的名叫阿财的朋友发来一封邮件,并把他自己 做的全部100题的答案一并发予给我,自此,便似遇见了知己。十分感谢。 任何东西只有分享出来才更显其价值。本只需贴出后面40题的答案,因为前60题的答案本人早已整理上 传至网上,但多一种思路多一种参考亦未尝不可。特此,把阿财的答案再稍加整理番,然后把全部100题的答 案现今都贴出来。若有任何问题,欢迎不吝指正。谢谢。 上千上万的人都关注过此100题,且大都都各自贡献了自己的思路,或回复于微软100题维护地址上,或 回复于本博客内,人数众多,无法一一标明,特此向他们诸位表示敬意和感谢。谢谢大家,诸君的努力足以影 响整个互联网,咱们已经迎来一个分享互利的新时代。 感谢诸君,请享用.....

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧