一个简略的算法编程题

一个简单的算法编程题

题目要求:

 

请用JAVA编写如下程序:处理一个由整数组成的数组(长度自定),例如-1, -3, 9, 3, -7, 1, -8, -2, -5, 1, -1, -6, -4, -2, -7, 2, -9, 7, 8, 9, -1, -8, 1, 2, 3, 4,把数组中所有连续两个以上(含两个)的负数去掉,剩余负数替换为0,将结果存入一个新数组。如上例处理后结果为,9, 3, 0, 1, 1, 2, 0, 7, 8, 9, 1, 2, 3, 4

 

package test;

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

public class Test {

	public static List<Integer> test(int[] arr) {
		List<Integer> list = new ArrayList<Integer>();
		for (int index = 0; index < arr.length; index++)
			list.add(arr[index]);

		for (int i = 0; i < list.size(); i++) {

			// 先判断第一个是否为0
			if (list.get(i) < 0) {
				// count为小于0的个数
				int count = 1;

				// 再判断接下来的一个是否为0
				for (int j = i + 1; j < list.size(); j++) {

					// 如果下一个小于0
					if (list.get(j) < 0) {
						// System.out.print("j" + list.get(j));
						// 则继续往下判断,并记下小于0的个数
						count++;
						continue; // 在本层继续循环
					} else {

						// 如果下一个不小于0
						// System.out.println();
						switch (count) {

						// 如果count=0,则说明只有一个连续小于0的数
						case 1: {
							System.out.println("设置为0的数::" + list.get(i));
							list.set(i, 0);
							break;
						}

						// 否则,先记下最后一个小于0的下标j
						default: {

							// 从i开始,到j的所有小于0的数都要删除
							for (int h = i; h < j; h++) {

								// System.out.println("要删除的数::" + list.get(i));
								list.remove(i);
							}
						}

						}

						// 删除之后要在这里跨出第二个循环
						break;
					}

				}
			}

		}
		return list;
	}

	public static void main(String[] args) {

		int[] arr = { -1, -3, 9, 3, -7, 1, -8, -2, -5, 1, -1, -6, -4, -2, -7,
				2, -9, 7, 8, 9, -1, -8, 1, 2, 3, 4 };
		System.out.println(test(arr));
	}

}

 

 

 

 

 

 思想虽然很简单,但我觉得simple is best一个简略的算法编程题