![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 黃思婷 ![]()
![]() |
1樓 |
這是什麼? 數獨嗎?
本篇文章回覆於2018-08-04 22:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
黃思婷 ![]() |
不是哦~題目是要隨機定義5*5的矩陣,數字全是1~5 ,然後找出行列對角線重複的數字
本篇文章回覆於2018-08-04 22:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓 | |
4樓 |
可用 TreeSet 試試
https://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#add(E)
本篇文章回覆於2019-01-11 11:30
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓 |
註解中的二維陣列指的是二維的ArrayList,只是我個人喜歡這樣講,比較直觀.
[code] package practice.selfPractice; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class pra08 { public static void main(String[] args) { //產生一個隨機5x5二維陣列,並印出各行列.對角線有重複的數字 printArray(genRandom2DArr()); } private static void printArray(List<ArrayList<Integer>> _2DArr) { //紀錄那些位置有重複,重複就打X(到時就要顯示,沒重複的位置顯示-) List<ArrayList<String>> _2DArrRecord = new ArrayList<ArrayList<String>>(); for(int i=0, len=_2DArr.size(); i<len; i++) { _2DArrRecord.add(new ArrayList<String>(Arrays.asList("-","-","-","-","-"))); } for(int i=0; i<5; i++) { List<Integer> _1DArr = _2DArr.get(i); List<Integer> colArr = new ArrayList<Integer>(); //調查列有沒有重複元素,重複打X setNoDuplicateAs0(_1DArr, _2DArrRecord, new int[] {i,i,i,i,i}, new int[] {0,1,2,3,4}); for(int j=0; j<5; j++) { colArr.add(_2DArr.get(j).get(i)); } //調查行有沒有重複元素,重複打X setNoDuplicateAs0(colArr, _2DArrRecord, new int[] {0,1,2,3,4}, new int[] {i,i,i,i,i}); } //看兩條對角線各自有沒有重複的元素,重複打X List<Integer> diagonalArr1 = new ArrayList<Integer>(); diagonalArr1.add(_2DArr.get(0).get(0)); diagonalArr1.add(_2DArr.get(1).get(1)); diagonalArr1.add(_2DArr.get(2).get(2)); diagonalArr1.add(_2DArr.get(3).get(3)); diagonalArr1.add(_2DArr.get(4).get(4)); setNoDuplicateAs0(diagonalArr1, _2DArrRecord, new int[] {0,1,2,3,4}, new int[] {0,1,2,3,4}); List<Integer> diagonalArr2 = new ArrayList<Integer>(); diagonalArr2.add(_2DArr.get(0).get(4)); diagonalArr2.add(_2DArr.get(1).get(3)); diagonalArr2.add(_2DArr.get(2).get(2)); diagonalArr2.add(_2DArr.get(3).get(1)); diagonalArr2.add(_2DArr.get(4).get(0)); setNoDuplicateAs0(diagonalArr2, _2DArrRecord, new int[] {0,1,2,3,4}, new int[] {4,3,2,1,0}); System.out.println("檢查結果(重複的數字顯示出來)"); for(int i=0; i<5; i++) { ArrayList<String> _1DArrRecord = _2DArrRecord.get(i); List<Integer> _1DArr = _2DArr.get(i); for(int j=0; j<5; j++) { if("X".equals(_1DArrRecord.get(j))) { _1DArrRecord.set(j, _1DArr.get(j)+""); //打X的要顯示(從原本的array搬值過來),沒打X的維持原樣(-) } } System.out.println(_1DArrRecord); } } //將 Array中重複的元素設為X private static void setNoDuplicateAs0(List<Integer> _1DArr, List<ArrayList<String>> _2DArrRecord, int[] x, int[] y) { String _1DStr = _1DArr.toString(); for(int i=0, len=_1DArr.size(); i<len; i++) { String iStr = String.valueOf(_1DArr.get(i)); if(_1DStr.indexOf(iStr) != _1DStr.lastIndexOf(iStr)) { _2DArrRecord.get(x[i]).set(y[i],"X"); //給重複的打X } } } //產生亂數5x5 Array private static List<ArrayList<Integer>> genRandom2DArr(){ System.out.println("2D Arr =>"); List<ArrayList<Integer>> _2DArr = new ArrayList<ArrayList<Integer>>(); for(int i=0; i<5; i++) { ArrayList<Integer> _1DArr = new ArrayList<Integer>(); for(int j=0; j<5; j++) { _1DArr.add((int) (1+Math.floor(Math.random()*5))); } _2DArr.add(_1DArr); System.out.println(_1DArr); } return _2DArr; } } [/code]
本篇文章回覆於2019-02-22 15:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓 |
setNoDuplicateAs0 , 請將之更名為setNoDuplicateAsX (不改也不影響啦:P)
(之前的開發階段本來要設成0,後來改設成X,但方法名忘了改了:P)
本篇文章回覆於2019-02-22 15:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |