2012-12-04 15 views
2

我需要此項目的幫助。我似乎無法找到讓測試代碼運行的方法。我不允許更改測試代碼,只有IntegerSet類。我仍在學習,請幫助我解決這個問題。如何調整代碼以使用兩個參數而不是一個?

我知道代碼很長所以我把評論問題!靠近測試中的兩個點和當前代碼,其中似乎有紅旗。 也許toString()必須處理它,但不知道。

當前代碼:

public class IntegerSet { 
    private int [] a; // holds a set of numbers from 0 - 100 

    public IntegerSet() { 
    // an empty set, all a[i] are set to 0 
    a = new int [101]; 
    } 

    // A constructor that copies from an existing set. 
    public IntegerSet (IntegerSet existingSet) { 
    a = new int [101]; 
    for(int i=0; i<a.length; i++) 
     a[i] = existingSet.a[i]; 
    } 

    public void deleteElement(int i) { 
    if ((i >= 0) && (i < a.length)) 
     a[i] = 0; // set to 1 
    } 

    public void insertElement(int i) { 
    if ((i >= 0) && (i < a.length)) 
     a[i] = 1; // set to 1 
    } 

    public boolean isSet(int i) { 
    return (a[i] == 1); 
    } 
    // PROBLEM!!!! 

    // The union of this set and another set 
    public IntegerSet union(IntegerSet otherSet) { 
    IntegerSet newSet = new IntegerSet(this); 

    // newSet is now a copy of the current set, Next we 
    // want to union with set a 

    for(int i=0; i<a.length; i++) { 
     if (otherSet.isSet(i)) 
     newSet.insertElement(i); 
    } 

    return newSet; 
    } 
    // PROBLEM!!! 
    // The intersection of this set and another set 
    public IntegerSet intersection(IntegerSet otherSet) { 
    IntegerSet newSet = new IntegerSet(this); 

    // newSet is now a copy of the current set, Next we 
    // want to intersect with set a 

    for(int i=0; i<a.length; i++) { 
     if (!otherSet.isSet(i)) 
     newSet.deleteElement(i); 
    } 

    return newSet; 
    } 


    // return true if the set has no elements 
    public boolean isEmpty() { 
    for (int i=0; i<a.length; i++) 
     if (isSet(i)) return false; 
    return true; 
    } 

    // return the 'length' of a set 
    public int cardinality() { 
    int count = 0; 
    for (int i=0; i<a.length; i++) 
     if (isSet(i)) 
     count++; 
    return count; 
    } 

    // Print a set to System.out 
    public void setPrint() { 
    System.out.print("[Set:"); 

    if (isEmpty()) 
     System.out.print("---"); 

    for (int i=0; i<a.length; i++) { 
     if (isSet(i)) 
     System.out.print(" " + i); 
    } 

    System.out.print("]\n"); 
    } 

    // return true if two sets are equal 
    public boolean isEqualTo(IntegerSet otherSet) { 
    for(int i=0; i<a.length; i++) { 
     if (otherSet.isSet(i) != isSet(i)) 
     return false; 
    } 
    return true; 
    } 

測試代碼:

import java.util.Scanner; 

public class IntegerSetTest { 

    public static void main(String args[]) { 

     IntegerSet setA = new IntegerSet(); 
     IntegerSet setB = new IntegerSet(); 

     Scanner scan = new Scanner(System.in); 
     int input; 

     do {    
      // Just for formatting purposes... 
      System.out.println();    
      System.out.println("setA: " + setA); 
      System.out.println("setB: " + setB); 
      System.out.println("1) insertElement into setA"); 
      System.out.println("2) deleteElement from setA"); 
      System.out.println("3) insertElement into setB"); 
      System.out.println("4) deleteElement from setB"); 
      System.out.println("5) intersection of setA and setB"); 
      System.out.println("6) union of setA and setB"); 
      System.out.println("7) equality of setA and setB"); 
      System.out.println("Select from the menu above (or 0 to exit): "); 
      input = scan.nextInt(); 

      switch(input) { 
       case 1: 
        System.out.print("Enter an element to insert into setA: "); 
        setA.insertElement(scan.nextInt()); 
        break; 
       case 2: 
        System.out.print("Enter an element to delete from setA: "); 
        setA.deleteElement(scan.nextInt());     
        break; 
       case 3:  
        System.out.print("Enter an element to insert into setB: "); 
        setB.insertElement(scan.nextInt());     
        break; 
       case 4: 
        System.out.print("Enter an element to delete from setB: "); 
        setB.deleteElement(scan.nextInt());     
        break; 
       case 5: // PROBLEM! 
        System.out.println("The intersection of setA and setB is: " + IntegerSet.intersection(setA, setB)); 
        break; 
       case 6: // PROBLEM! 
        System.out.println("The union of setA and setB is: " + IntegerSet.union(setA, setB)); 
        break; 
       case 7: 
        System.out.println("setA and setB are " + (setA.isEqualTo(setB) ? "" : "un") + "equal"); 
        break; 
       default: 
        if (input != 0) { 
         System.out.println("\n*** Error, invalid input! ***\n"); 
        } 
      }   
     }while(input != 0); 
    } 

} 

回答

0
public static IntegerSet union(IntegerSet otherSet, IntegerSet nextSet) { 

    for(int i=0; i<a.length; i++) { 
     if (otherSet.isSet(i)) 
     nextSet.insertElement(i); 
    } 

    return nextSet; 
    } 

    public static IntegerSet intersection(IntegerSet otherSet, IntegerSet nextSet) { 

    for(int i=0; i<a.length; i++) { 
     if (!otherSet.isSet(i)) 
     nextSet.deleteElement(i); 
    } 

    return nextSet; 
    } 
+0

我無法編輯測試,就像您所做的一樣。我可以更改當前的代碼。只是不確定如何添加這兩個參數。 – user1874549

+0

我改變了我的答案,請現在檢查 –

+0

那麼工作。謝謝 – user1874549

0

你會發現,測試代碼運行

IntegerSet.intersection(setA, setB) 
IntegerSet.union(setA, setB) 

,而不是

setA.intersection(setB) 
setA.union(setB) 

區別在於第一個是對靜態方法的調用,第二個是對實例方法的調用。您的實現包含實例方法,它們自己使用(this)而不是接受第二個參數。

(總之,改變this第二參數的值和static關鍵字添加到您的方法。此外,你必須改變參考私人a使用存取方法。)

+0

如果我只是刪除私人? – user1874549

+0

如何更改參考? – user1874549

相關問題