2012-05-30 104 views
-2

如何在循環時將兩個元素添加到2D數組中。添加到2D陣列

for(...){ 
gradeArray[i][i] (gradeArray[95][5] <---- i = 0, gets the zero term for the grade and frequency 
gradeArray[i][i] (gradeArray[96][2] <-----i = 1; gets the first term for the grade and frequency 
+1

你有沒有原因不使用面向對象的設計? – RustyTheBoyRobot

+0

我是一個noob,我能說什麼:P – cmcdaniels

+0

從你的問題(至少對我來說)不清楚你的數組的兩個維度是什麼,以及你想要存儲什麼值。等級和頻率是兩個不同的列表,還是它們以某種方式相互關聯?如果是這樣,怎麼樣?比如,每個年級是否以某個頻率出現(30%的學生獲得了B?),或者每個頻率都分配了一個等級(99.7 MHz是「中等流行」等級),或者每個等級年級和頻率(等級'AA'債券,'每月'分紅費用爲50美元)等。 – Jay

回答

-3

只使用2所列出,一個年級,一個用於頻率

使用:

List<Integer> grades = new ArrayList<Integer>(); 
List<Integer> freq = new ArrayList<Integer>(); 
grades.add(grade); 
freq.add(frequency); 

添加到他們

這將是一個簡單得多。

例如:

while(1 == 1) //infinite loop 
{ 
    grade = -1 
    frequency = -1 
    grade = inputGrade.nextInt(); 
    frequency = inputFrequency.nextInt(); 
    if(grade != -1 && frequency != -1) 
    { 
     grades.add(grade); 
     freq.add(frequency); 
    } 
    else 
    { 
    //if using a command window 
    System.out.println("Missing either frequency or grade, values not stored"); 
    //if not using a command window 
    JOptionPane.showMessageDialog(null, "Missing either frequency or grade, values not stored"); 
    } 
} 
+0

這不是兩個數組,而是兩個列表 – user3001

+1

我認爲列表在這種情況下可以做得很好,但是它們不是數組。 – Hassan

+0

我認爲這是一個可怕的設計。什麼是評分與頻率的關聯?您基本上希望您的索引永遠不會失去同步...... – RustyTheBoyRobot

5

在我看來,你想知道的時候每個年級時的數量。我認爲你最好的選擇將是一個HashMap:

Map<Integer, Integer> frequencyTable = new HashMap<Integer, Integer>(); 
for (Integer grade : gradeArray) { 
    if (!frequencyTable.containsKey(grade)) { 
     frequencyTable.put(grade, Collections.frequency(gradeArray, grade)); 
    } 
} 
+0

這更好,因爲Map是一種數據結構,可以更好地表示您正在存儲的數據。每個年級都直接與單一頻率相關聯。如果你有兩個列表,你可以(很容易)以不同步的列表結束。 – RustyTheBoyRobot

+0

+1更好的整體設計 –

1

你的新的編輯仍撲朔迷離給我,但是這是所有我能想到的,你都在問:

int[][] gradesAndFrequencies = new int[gradeCount][2]; 
for (int i = minGrade; i < maxGrade; i++) { 
    int grade = ?; 
    int frequency = ?; 
    gradesAndFrequencies[i][0] = grade; 
    gradesAndFrequencies[i][1] = frequency; 
} 

這是假設你知道總共有多少年級,你知道如何找到每個年級及其頻率。

對於Ted Hopp的回答,我仍然堅持我之前的評論:沒有任何關於你想要做什麼的額外信息,我不得不說,這不是一個很好的數據模型。

0

你不會喜歡它,但這是如何。 所以,數組是不可變的。所以,爲了避免這個問題,我會使用一個可變的ArrayList。但要回答您的問題(假設尺寸爲95x95):

int newGradeArray[][] = new int[96][96]; //creating a new array that has an extra column and row, for more space. 
for(int i = 0; i < 95; i++)//a set of nested loops taking everything from the old array, and moving it to this new one. 
    for(int j = 0; j < 95; j++) 
     newGradeArray[i][j] = gradeArray[i][j] 
//now to add the elements (in the new element or column, your choice) 
newGradeArray[95][95] = 95; //assigns the very edge of the new array a value of 95 

或者,您可以使用ArrayList。 這樣,你不需要作出新的陣列和重新分配,你可以這樣做:

ArrayList<Integer> a = new ArrayList<Integer>(); //note: ArrayLists can only have classes, not primitive types. Luckily, Integer and I think Character are classes too! 
a.add(95, new Integer(95)); //sets the index of 95 as an Integer: 95. 

而這些可以由2維。 或者:

ArrayList<int[]> i = new ArrayList<int[]>(); 

甚至: 的ArrayList> L =新的ArrayList>(); 如果你想:)

希望這有助於!