1. 程式人生 > >java生成只包含兩種型別, 並且比例可配置的二維陣列程式碼

java生成只包含兩種型別, 並且比例可配置的二維陣列程式碼

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

public class Generate2Array {

	public static void main(String[] args) {
		/*
		 * 陣列維度宣告
		 */
		int px = 20;
		int py = 10;
		
		/*
		 * 按照比例生成一個集合 
		 */
		double percent = 0.2;
		int count = px * py;
		List<Integer> l = new ArrayList<>();
		for(int i =0; i<(count * percent); i++) {
			l.add(0);
			
		}
		for (int i = 0; i < count*(1-percent); i++) {
			l.add(1);
		}
		
		/*
		 * 打亂順序
		 */
		exchange(l);
		
		/*
		 * 賦值到陣列中
		 */
		Integer[][] s = new Integer[px][py];
		for (int i = 0; i < count; i++) {
			int index1 = i/py;
			int index2 = i%py;
			s[index1][index2] = l.get(i);
		}
		
		/*
		 * 統計資訊, 列印輸出驗證結果
		 */
		int countx = 0;
		int county = 0;
		for (int i = 0; i < s.length; i++) {
			for (int j = 0; j < s[i].length; j++) {
				if(s[i][j].intValue() == 0) {
					countx++;
				} else if (s[i][j].intValue() == 1) {
					county++;
				}
				System.out.print(s[i][j] + " ");
			}
			System.out.println();
		}
		System.out.println("0個數" + countx + ", 1個數:" + county);
		
	}
	
	
	/**
	 * 隨機化
	 * @param l
	 */
	private static void exchange(List<Integer> l) {
		if(l == null || l.isEmpty())
			return;
		Random r = new Random();
		for (int i = 0; i < l.size(); i++) {
			int j = r.nextInt(l.size());
			if(j != i) {
				Integer temp = l.get(j);
				l.set(j, l.get(i));
				l.set(i, temp);
			}
		}
		
	}
	
}