2014-01-25 62 views
0

我正在爲我的任務之一獲得獎金。我應該創建一個非常大的數組,但用戶不必使用陣列中的所有插槽。以前我使用增強的for循環來填充所有索引的常規數組。我不確定如何改變這個以適應新的標準。部分填充數組 - 獲取最小值和toString

每當我在測試儀中輸入數字時,toString返回空白點,最小值返回0,因爲空白點的值爲0。

public class NumberSetBonus 
{ 
    private int[] numbers; 
    private int count; 

    /** 
    * Constructs an empty NumberSet of a specified size 
    * @param size the number of elements in the set 
    */ 
    public NumberSetBonus(int size) 
    { 
     numbers = new int[size]; 
     count = 0; 
    } 

    /** 
    * addNumber adds a number to the number set 
    * @param num new number 
    */ 
    public void addNumber(int num) 
    { 
     numbers[count] = num; 
     count++; 
    } 

    /** 
    * getMin finds the minimum value stored in the NumberSet 
    * @return the minimum value 
    * precondition: array is full of values 
    */ 
    public int getMin() 
    { 
     int min = numbers[0]; 

     for(int n : numbers) 
      if(n < min) 
       min = n; 

     return min; 
    } 

    /** 
    * getMax finds the maximum value stored in the NumberSet 
    * @return the maximum value 
    * precondition: array is full of values 
    */ 
    public int getMax() 
    { 
     int max = numbers[0]; 

     for(int n : numbers) 
      if(n > max) 
       max = n; 

     return max; 
    } 

    /** 
    * find determines whether a specified value exists in the set. 
    * @param num the number to find 
    * @return whether the value exists 
    */ 
    public boolean find(int num) 
    { 
     boolean find = true; 

     for(int n : numbers) 
      if(n == num) 
       find = true;  

     return find;  
    } 

    /** 
    * getSum calculates the sum of the values in the set. 
    * @return the sum 
    */ 
    public int getSum() 
    { 
     int sum = 0; 

     for(int n : numbers) 
      sum += n; 

     return sum; 
    } 

    /** 
    * getMean calculates the mean of the values in the set. 
    * @return the mean as a double 
    * precondition: array is full of values 
    * NOTE: use the length field of the array 
    */ 
    public double getMean() 
    { 
     return getSum()/(double) numbers.length; 
    } 

    /** 
    * count counts the occurrence of a specified number within the set. 
    * @param num the number to find 
    * @return the number of times num occurs in the set 
    */ 
    public int count(int num) 
    { 
     int quantity = 0; 

     for(int n : numbers) 
      if(n == num) 
       quantity++; 

     return quantity; 
    } 

    /** 
    * toString returns a String containing the values in the set on a 
    * single line with a space between each value. 
    * @return the String version of the set 
    */ 
    public String toString() 
    { 
     String set = " "; 

     for(int n : numbers) 
      set += n + " "; 
     return set; 
    } 
} 

這裏是我的測試,我在那裏索要用戶的輸入,並且其中toString()返回0

public class NumberSetBonusTester 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     final int LENGTH = 100; 
     NumberSetBonus list = new NumberSetBonus(LENGTH); 
     int arraySize = 0; 

     System.out.print("You can enter up to 100 numbers in this array. \nType in a negative number if you want to stop adding numbers.\nEnter a number: "); 

     while(arraySize < LENGTH) 
     { 
      int number = input.nextInt(); 
      if(number <= 0) 
       break; 
      list.addNumber(number); 
      arraySize++; 
     }   

     System.out.print("\nset 1:\t\t"); 
     System.out.println(list); 
     System.out.println("list sum:\t" + list.getSum()); 
     System.out.println("list mean:\t" + list.getSum()/arraySize); 
     System.out.println("list max:\t" + list.getMax()); 
     System.out.println("list min:\t" + list.getMin()); 
     System.out.println(); 
     System.out.print("Enter a number to find ==> "); 
     int searchNum = input.nextInt(); 
     if (list.find(searchNum)) 
      System.out.println(searchNum + " is in the set " + list.count(searchNum) + " times"); 
     else 
      System.out.println(searchNum + " is not in the set"); 
    } 
} 

回答

2

您可以簡單地改變for循環的形式for (int i = 0; i < count; i++)所有的 - 這樣的循環只會循環實際設置的數字,而不是數組中的所有數字。

順便說一句:如果將來需要一些可變大小的陣列,可以使用List(來自java.util包)。在你的例子中,我會使用ArrayList<Integer>。這是一個內部使用數組的列表,但如果數組變得太小(通過創建新數組並複製內容),它將增加其大小。

+0

非常感謝!你搖滾:D – user3001948