1 package com.array;
2
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Random;
6
7 /**
8 * @Desciption:向 int 数组随机插入 100 个数
9 * @author swifthua
10 * @date 2017年10月20日 下午9:08:29
11 */
12 /*
13 * 题目介绍:产生一个 int 数组,长度为 100,并向其中随机插入 1-100,并且不能重复。
14 */
15 public class IntArray {
16
17 public static void main(String[] args) {
18 int[] obj = new int[100]; // 声明一个100长度的数组
19 List<Integer> list = new ArrayList<Integer>();
20 for (int i = 1; i <= 100; i++)
21 list.add(i); // 我把100个数存到集合中
22
23 for (int i = 0; i < 100; i++) {
24 int index = new Random().nextInt(list.size()); // 随机取一个小于当前集合长度的下标
25 obj[i] = list.get(index);// 取出集合中的数据放到数组里
26 list.remove(index);// 集合中删除此下标
27 }
28 for (int i = 0; i < 100; i++) { // 打印输出
29 if (i % 10 == 0) {
30 System.out.println();
31 } else {
32 System.out.print(obj[i] + " ");
33 }
34 }
35 }
36
37 }
1 package com.datatype;
2
3 /**
4 * @Desciption:递归逆序输出一个 int 类型数
5 * @author swifthua
6 * @date 2017年10月20日 下午9:12:55
7 */
8 /*
9 * 原题:用递归算法对输入一个整形数,然后逆序输出,输出的必须是字符串。
10 */
11 public class IntTest1 {
12 public static String reverse(int a) {
13 if (a < 0) {
14 return "请输入一个正整数..";
15 }
16 if (a < 10)
17 return Integer.toString(a);
18 int last = a - (a / 10) * 10;// 获取未位
19 return Integer.toString(last) + reverse(a / 10);// 递归输出最后一位和前面的倒序数字
20 }
21
22 public static void main(String[] args) {
23 String str = reverse(12342);
24 System.out.println(str);
25 }
26 }
1 package com.string;
2
3 /**
4 * @Desciption:截取字符串
5 * @author swifthua
6 * @date 2017年10月20日 下午8:55:59
7 */
8 /*
9 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,
10 应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
11 */
12 public class CutString {
13 public static void split(String source, int num) {
14 int k = 0;
15 StringBuffer sbf = new StringBuffer("");
16 for (int i = 0; i < source.length(); i++) {
17 byte[] b = (source.charAt(i) + "").getBytes();
18 k = k + b.length;
19 if (k > num)
20 break;
21 sbf.append(source.charAt(i));
22 }
23 System.out.println(sbf.toString());
24 }
25
26 public static void main(String[] args) {
27 String SOURCE = "我ABC汉DEF";
28 int NUM = 5;
29 CutString.split(SOURCE, NUM);
30 }
31 }
1 package com.search;
2
3 /**
4 * 二分查找
5 * @author swifthua
6 * @date 2017年10月21日 下午1:12:10
7 */
8 /*
9 * 算法的思想是对于已经有序的数组,查找一个随机数字时,每次取数组的中间数与目标数比较便可。
10 */
11 public class BinarySearch {
12
13 public static int find(int[] array, int objKey) {
14 int start = 0;
15 int end = array.length - 1;
16 while (start <= end) {
17 int middle = (start + end) / 2; // 找出中间位
18 if (objKey < array[middle]) {
19 end = middle - 1;
20 } else if (objKey > array[middle]) {
21 start = middle + 1;
22 } else {
23 return middle;
24 }
25 }
26 return -1;
27 }
28
29 public static void main(String[] args) {
30 int array[]=new int[]{1,2,4,12,25,36,48,58,64,99};
31 System.out.println(find(array,64));
32 System.out.println(find(array,16));
33 }
34
35 }
1 package com.thread;
2
3 /**
4 * @Desciption:多线程编程
5 * @author swifthua
6 * @date 2017年10月20日 下午9:04:04
7 */
8 /*
9 * 设计 4 个线程,其中两个线程每次对 j 增加 1,另外两个线程对 j 每次减少 1,写出程序。
10 */
11 public class ThreadTest {
12 private int j;
13
14 public static void main(String args[]) {
15 ThreadTest tt = new ThreadTest();
16 Inc inc = tt.new Inc();
17 Dec dec = tt.new Dec();
18 for (int i = 0; i < 2; i++) {
19 Thread t = new Thread(inc);
20 t.start();
21 t = new Thread(dec);
22 t.start();
23 }
24 }
25
26 private synchronized void inc() {
27 j++;
28 System.out.println(Thread.currentThread().getName() + "-inc:" + j);
29 }
30
31 private synchronized void dec() {
32 j--;
33 System.out.println(Thread.currentThread().getName() + "-dec:" + j);
34 }
35
36 class Inc implements Runnable {
37 public void run() {
38 for (int i = 0; i < 100; i++) {
39 inc();
40 }
41 }
42 }
43
44 class Dec implements Runnable {
45 public void run() {
46 for (int i = 0; i < 100; i++) {
47 dec();
48 }
49 }
50 }
51
52 }