2014-10-05 76 views
-1

所以在這裏我再次遇到另一個問題。你一讀到我的代碼和輸出就會明白我的意思。我正在嘗試打印我的Array的數字和它們的出現次數。 !!!不能使用任何導入代碼...... !!!我的代碼分別寫入事件

 int[] fr = new int[Bag.length]; 
     for(int i = 0; i < Bag.length; i++) 
     fr[i]++; 
     for(int i = 0; i < fr.length; i++) { 
     if(fr[i] > 0) 
     System.out.println("The number " + Bag[i] + " occurs " + fr[i] + " time(s).");}} 

如果我添加5,6和5到我的數組; (我創建了我的添加操作btw,所以起初我的數組爲0然後變大)

輸出:數字5出現1次(s)。 數字6發生1次(s)。 數字5發生1次(s)。

我的添加操作BTW是:

 int[] Bag = new int[0]; 
     String name = scanner.next(); 

     if (name.equals("A")){ 
     int number = scanner.nextInt();  
     NewBag[NewBag.length - 1] = number; 
     for(int i = 0; i < Bag.length; i++){ 
     NewBag[i] = Bag[i];} 
     Bag = NewBag; 
     System.out.println(number + " added to Bag.");} 
+1

你可以發佈你添加5,6和5的代碼嗎?也許它有助於解釋它出錯的地方。 – Chronio 2014-10-05 18:03:32

+0

這看起來像一個「直方圖」 - 也許它有助於谷歌「直方圖」。這是一個很好的問題/答案在SO(http://stackoverflow.com/questions/13106906/how-to-create-a-histogram-in-java) – Matthias 2014-10-05 18:05:24

+0

什麼讓你相信我們會明白,當我們閱讀你的代碼?作爲一個瘋狂的猜測,我認爲你想增加fr [Bag [i]]而不是fr [i]。但是,這將產生ArrayIndexOutOfBoundsExceptions ... – 2014-10-05 18:07:45

回答

0

雖然您還有其他問題,但您應該這樣做。

int[] fr = new int[10000];// modified 
for(int i = 0; i < Bag.length; i++) 
    fr[Bag[i]]++; // Here 
for(int i = 0; i < fr.length; i++) { 
    if(fr[i] > 0) 
     System.out.println("The number " + Bag[i] + " occurs " + fr[i] + " time(s).");}} 

問題什麼是Bag數組中的最大值和最小值?說Bag=new int[10]並且它的範圍是0-10000;然後fr=new int[10001];

好,對其他問題,我看到你試圖增加

int[] Bag = new int[0]; 
    String name = scanner.next(); 
    int[] NewBag; 
    if (name.equals("A")){ 
     int number = scanner.nextInt();  
     NewBag = new int[Bag.length+1];// resize the array 
     NewBag[NewBag.length - 1] = number; 
     for(int i = 0; i < Bag.length; i++){ 
      NewBag[i] = Bag[i]; 
     } 
     Bag = NewBag; 
     System.out.println(number + " added to Bag."); 
    } 
+0

是的,它給我一個ArrayIndexOutOfBoundsException錯誤。但是我不知道如何在不使數組長度爲0的情況下進行添加操作。 – HalilM 2014-10-05 18:09:24

+0

@HalilM,我修改了第一行,以便您暫時擁有一個固定大小的fr,以便讓編碼進行。 – 2014-10-05 18:17:19

+0

嗯,我只是將它修改爲10000.再次相同的錯誤。我認爲只要我保持Bag數組的長度爲0,就會給我這個錯誤,對吧? – HalilM 2014-10-05 18:21:21

1

更好地利用相關地圖。

Map<Integer,Integer> occurences= new HashMap<Intege,Integer>(); 
for(int bagValue: bag){ 
int counter = occurences.hasValue(bagValue)? occurences.get(bagValue): 0; 
occurences.put(bagValue, counter++) 
} 

這個任務會更敏捷,內存要求也更低。

+0

|請記住,你的包的價值可以比巴哈的長度更大。將所有數據存儲在陣列中都需要知道最大值。 – Beri 2014-10-05 18:06:51

0

如果我理解正確的話,你有INTS的超集包的大小,和你想知道每個詮釋它的出現次數。爲此,你將不得不迭代你的數組,並檢查每個新的int,如果它已經被插入到數組中,並且如果是的話,分別增加。

int flag = 1 
for (i=0; i<Bag.length;i++){ 
    for(j=0;j<fr.length;j++){ 
     if(Bag[i] == fr[j]){ 
      fr[j]++; 
      flag = 0; 
      break; 
     } 
    if(flag){ 
     fr[i}++; 
    } 
}