台灣最大程式設計社群網站
線上人數
642
 
會員總數:245214
討論主題:189087
歡迎您免費加入會員
討論區列表 >> Java >> java矩陣找出相同數字
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
java矩陣找出相同數字
價值 : 5 QP  點閱數:482 回應數:6

樓主

黃思婷
門外漢
0 1
10 1
發送站內信

請問如何在一個亂數矩陣的行列和對角線中找出相同數字?(緊急跪求解答)




搜尋相關Tags的文章: [ java矩陣 ] ,
本篇文章發表於2018-08-04 18:03
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

小魚
檢舉此回應
這是什麼? 數獨嗎?
本篇文章回覆於2018-08-04 22:46
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

黃思婷
檢舉此回應
不是哦~題目是要隨機定義5*5的矩陣,數字全是1~5 ,然後找出行列對角線重複的數字
本篇文章回覆於2018-08-04 22:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

小魚
檢舉此回應
跟數獨蠻像的,
之前我們有討論過這方面的內容,
參考一下 這一篇
本篇文章回覆於2018-08-05 10:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

JavaHand
檢舉此回應
可用 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
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.