2015-10-14 65 views
4

我的作业是使用数组实现包的实现,您可以根据需要添加和删除数字。到目前为止,我已经成功地做到一切,除了数字和发生的名单,这应该是这个样子:数组和数组中的出现次数

img

我不知道从哪里开始,所以一些三分球将是很好,请并感谢你。 (注意:我不允许使用除数组之外的其他任何东西,因此arraylist,collection等不能帮助我。)

编辑:我为计数创建了另一个数组,并且代码在某些情况下似乎工作正常。但是,有时当我运行它时,它会给我一个完全错误的输出,我不知道如何解决它?例如,如果我把号码(按照这个顺序)11,22,11,33,11,22我得到这个回:

enter image description here

import java.util.Scanner; 

public class Bag { 

int index = 0; 
int[] array = new int[50]; 

public static void main(String[] args) { 
    int x = 0; 
    Bag bag = new Bag(); 

    Scanner scan = new Scanner(System.in); 

    while (x == 0) { 
     System.out.print("Add(A), Delete(D), Find(F), Size(S), Min(m), Max(M), List(L), Quit(Q) >> "); 
     char c = scan.next().charAt(0); 
     switch (c) { 
      case 'A': 
       int y = scan.nextInt(); 
       bag.Add(y); 
       break; 
      case 'D': 
       int d = scan.nextInt(); 
       bag.Delete(d); 
       break; 
      case 'F': 
       int z = scan.nextInt(); 
       bag.Find(z); 
       break; 
      case 'S': 
       bag.Size(); 
       break; 
      case 'm': 
       bag.Min(); 
       break; 
      case 'M': 
       bag.Max(); 
       break; 
      case 'L': bag.List(); 
       break; 
      case 'Q': bag.Quit(); 
      } 
     } 

} 

public void Add(int y) { 
    array[index] = y; 
    index++; 
    System.out.println(" " + y + " is added to the Bag. "); 
} 

    public void Delete(int d) { 
for (int i = 0; i < index; i++) { 
    if (d == array[i]) { 
     while (i < index) { 
       array[i] = array[i + 1]; 
      i++; 
     } 
     System.out.println(" " + d + " is deleted from the Bag."); 
     index--; 
     return; 
    } 
} 
System.out.println(" Cannot delete " + d 
     + ". It does not exist in the Bag."); 

    } 

public void Find(int z) 
    { 
    int count = 0; 
    for (int i = 0; i < array.length; i++) { 
     if (array[i] == z) { 
      count++; 
     } 
     } 
     System.out.println(" There is (" + count + ") " + z 
       + " in the Bag."); 

      } 
public void Size() { 
    System.out.println(" There are " + index + " numbers in the Bag."); 
} 

public void Min() { 
    int min = array[0]; 
    for (int i = 1; i < index; i++) { 
     if(min > array[i]) { 
      min = array[i]; 
     } 
    } 
    System.out.println(" The minimum number in the Bag is " + min + "."); 
} 
public void Max() { 
    int max = array[0]; 
    for (int i = 1; i < index; i++) { 
     if(max < array[i]) { 
      max = array[i]; 
     } 
    } 
    System.out.println(" The maximum number in the Bag is " + max + "."); 
} 
public void Quit() { 
    System.out.println("Bye…"); 
} 

public int Count(int c) { 
    int elements = 0; 
    for (int i = 0; i < array.length; i++) { 
     if (array[i] == c) { 
      elements++; 
     } 
    } 
    return elements; 
} 
public void delete(int c) { 
    for (int i = 0; i < index; i++) { 
     if (c == array[i]) { 
      while (i < index) { 
       array[i] = array[i + 1]; 
       i++; 
      } 
      index--; 
      return; 
     } 
    } 
} 
public void List() { 
    System.out.println("+--------+--------+"); 
    System.out.println("| Number | Occurs |"); 
    System.out.println("+--------+--------+"); 

    for(int i = 0; i < index; i++){ 
     if(Count(array[i]) == 1){ 

     System.out.printf("|%8d|%8d|\n", array[i], Count(array[i])); 
     System.out.println("+--------+--------+"); 
     } 
     else{ 
      System.out.printf("|%8d|%8d|\n", array[i], Count(array[i])); 
      System.out.println("+--------+--------+"); 
      for(int j = 0; j <= Count(array[i]); j++){ 
       delete(array[i]); 
      } 
     } 
    } 
} 
} 
+1

您只需循环遍历数组中的所有索引,并且对于每一个索引,如果出现任何情况,请使用该信息打印一行。 – azurefrog

+0

如果您使用一个数组作为数字而另一个数组使用,则可能会更容易。 – laune

+0

您允许使用自定义对象吗? – christopher

回答

0

看起来你有问题名单() 方法。将其更改为:

public void List() { 
System.out.println("+--------+--------+"); 
System.out.println("| Number | Occurs |"); 
System.out.println("+--------+--------+"); 

while(index > 0){ 
    int del = array[0]; 
    int count = Count(del); 
    System.out.printf("|%8d|%8d|\n", del, count); 
    System.out.println("+--------+--------+"); 
    for(int j = 0; j < count; j++){ 
     delete(del); 
    } 
} 

}

+--------+--------+ 
| Number | Occurs | 
+--------+--------+ 
|  11|  3| 
+--------+--------+ 
|  22|  2| 
+--------+--------+ 
|  33|  1| 
+--------+--------+ 

也改变array.length索引将允许添加0。

public int Count(int c) { 
    int elements = 0; 
    for (int i = 0; i < index; i++) { 
     if (array[i] == c) { 
      elements++; 
     } 
    } 
    return elements; 
} 
+0

完美的作品,非常感谢你! – imaginedrragon

0

递归解决方案:

public int count(int c) { 
    int count = 0; 
    for (int i = 0; i < index; i++) 
     count += (c == array[i]) ? 1 : 0; 
    return count; 
} 

public void list() { 
    System.out.println("+--------+--------+"); 
    System.out.println("| Number | Occurs |"); 
    System.out.println("+--------+--------+"); 
    printRec(array); 
} 

private void printRec(int...ints) { 
    int constant = ints[0]; 
    if (constant == 0) return; 
    int count = count(constant); 
    System.out.printf("|%8d|%8d|\n", constant, count); 
    System.out.println("+--------+--------+"); 
    for (int i = 0; i < count; i++) 
     delete(constant); 
    printRec(array); 
} 

为了得到结果调用无效bag.list()。问题在于获取数组数据的时候正在改变。递归mehod将获取数据,然后更改array数据,然后使用新数据运行本身。

另外请记住,该方法始终必须从lowercase开始。 这不是一个功能错误,而是一个rule