同程艺龙笔试--编程题

蚊子昨天参与了同程艺龙的笔试,投的是 Java 岗,然后有四种题型:判断题、单选题、填空题、编程题,因为除了编程题之外,其他的题型题目都太多了,蚊子记不住,所以就在这里记录一下编程题。

题目描述:

控制台输入有一个字符串,请设计三个线程,分别依次在该字符串后面添加 “_A”,”_B”,”_C”,最后打印出这个字符。

样例

1
2
输入:afsdf
输出:afsdf_A_B_C

思路:

其实做法有很多的,关键就是如何在线程里面对一个字符进行操作,这里有两个方法,一个是共享数据,一个是传入该字符串然后进行添加操作,最后通过 Java 里面的有返回值的 Callable 接口,返回操作后的字符串。

这里蚊子选择的是后者,直接上代码看吧~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
package test;

/**
* 我们要做的就是有三个线程a,b,c,这三个线程都有一个方法分别添加 _A、_B、_C,问怎么能实现依次添加 _A, _B, _C的功能
* @author mosquito
*/
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class MultiThread {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.next();
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable c1 = new MyCallable(s, "_A");
Future f1 = executor.submit(c1);
try {
s = f1.get().toString();
c1 = new MyCallable(s, "_B");
f1 = executor.submit(c1);
s = f1.get().toString();
c1 = new MyCallable(s, "_C");
f1 = executor.submit(c1);
s = f1.get().toString();
System.out.println(s);
} catch (InterruptedException | ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class MyCallable implements Callable{
private String str;
private String ch;

public MyCallable(String str, String ch) {
this.str = str;
this.ch = ch;
}

@Override
public Object call() throws Exception {
return str + ch;
}

}

嘤嘤嘤~非常遗憾地是当时蚊子写完调试的时候 RE 了,然后时间也不够,哎~ 好可惜啊,哭泣