Carmella Seals Ответов: 1

Как я могу правильно реализовать свои четыре операции метода, чтобы протестировать их в моем основном методе?


Я разбил свою java-программу на два класса: один называется классом Student, а другой - классом StudentListing. Я просто пытаюсь понять, как я могу правильно реализовать четыре операции метода, чтобы я мог использовать их в основном методе для целей тестирования. Может кто-нибудь помочь? Я борюсь. Вот мой код для обоих классов.

public class Student{
           
     private String name;   // key field 

     private int ID; 

     private double GPA; 


   public Student(String name, int ID, double GPA){
     
       this.name= name; 
       this.ID= ID; 
       this.GPA=GPA; 
   } 

    public void setName(String name){ 
    
     this.name= name; 

   } 

   public String toString() { 
 
      return " Student Name: " + name + " Student ID: " + ID + "Student GPA: " + GPA; 
    }
  
  public String getName() { 

      return name; 

    }

   public void setID(int ID) { 

     this.ID= ID; 
 
    } 

     public int getID(){ 

      return ID; 

    } 

    public void setGPA(double GPA){ 

       this.GPA= GPA; 

    }

   public double getGPA(){ 
 
      return GPA; 

   }

  
}



public class StudentListings{


private Student[] data; // an array of Student objects
private int next;
private int size;


 
public StudentListings(){ 

  next=0; 
  size=100;
  data= new Student[size];

} 

public StudentListings(int s){ 

   next=0;
   data= new Student[s];
   size=s;

 } 

  public boolean insert(Student newStudentListing) { 

     // the structure is full 

    if(next > = size)  
      return false; 
 
    // store a deep copy of the client's node
 
     data[next]= newStudentListing.deepCopy(); 
 
     if(data[next]== null) 
       return false; 
      next= next + 1; // prepare for the next insert 
       return true; 
   } 


  public StudentListings fetch(String targetKey){ 
    
      
    StudentListings student; 
    StudentListings temp; 
 
    // access the node using a sequential search 
     int i=0; 
 
    while(i < next &&!(data[i].compareTo(targetKey)==0)
    {
        i++; 
    } 
 
    if(i== next) // node not found
      return null; 
 
     // deep copy the node's information into the client's node 
 
      student= data[i].deepCopy(); 
 
     if(i!= 0) // bubble-up accessed node
     { 
        temp= data[i-1]; 
        data[i-1]=data[i];
        data[i]= temp;
     } 
        return student; 
   }

   public boolean delete(String targetKey){ 
    
     int i=0; 
    while(i < next && !(data[i].compareTo(targetKey)==0))
     { 
        i++; 
     } 
     if(i==next) // node not found
 
      // move the last node into the deleted node's position
       return false; 
       data[i]= data[next-1]; 
       data[next-1]=null; 
       next= next-1; 
       return true; // node found and deleted 

   }

 public boolean update(String targetKey, Student newStudentListing){ 

   if(delete(targetKey)== false)
      return false; 
    else if(insert(newStudentListing)==false) 
      return false; 
    else 
       return true; 
} 


   public void showAll(){ 

   for(int i=0; i< next; i++){ 

   System.out.println(data[i].toString());
  
  } 


public static void main(String[] args){ 

      StudentListings obj1= new StudentListings();
      
      Student l1 = new Student("Terrence", 1, 3.45);
      Student l2 = new Student("Roberta", 2, 2.15);
      Student l3 = new Student("George", 3, 1.50);
      
       obj1.insert(l1);
       obj1.insert(l2);
       obj1.insert(l3);

       obj1.ShowAll();

       l3= obj1.fetch("Terrence");

       System.out.println(l3.toString());

       obj1.delete("Roberta");

       obj1.ShowAll();

       obj1.update("George");

       obj1.ShowAll(); 

}


Что я уже пробовал:

Я попытался реализовать эти методы в своем основном методе, который был описан выше, но еще не протестировал их, потому что мне нужна некоторая помощь в их правильной реализации. Кто-нибудь может мне помочь?

wirvine

Привет, не могли бы вы предоставить более подробную информацию? Четко объясните, что вы хотите, чтобы ваша программа делала. У вас есть много определенных методов, и вы пытаетесь использовать некоторые методы, которых не существует.

1 Ответов

Рейтинг:
7

wirvine

package mypackage;

public class Student {

	private String name; // key field
	private int ID;
	private double GPA;
	
	public Student(String name, int ID, double GPA) {
		this.name = name;
		this.ID = ID;
		this.GPA = GPA;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public String toString() {
		return " Student Name: " + name + " Student ID: " + ID + " Student GPA: " + GPA;
	}
	
	public String getName() {
		return name;
	}
	
	public void setID(int ID) { 		  
		this.ID= ID;		 
	} 
		 
	public int getID(){		 
	    return ID;		 
	} 
		 
	public void setGPA(double GPA){		 
		this.GPA= GPA; 		 
    }
	
	public double getGPA(){ 	   
	    return GPA;		 
	}
	
}



package mypackage;

public class StudentListings {

	// https://www.codeproject.com/Questions/1207978/How-can-I-implement-my-four-method-operations-righ

	public static void main(String[] args) {

		StudentListings obj1 = new StudentListings();

		// NOTE: would stick to avoid using numbers as object names
		//       this will get messed up if you want to pass them into
		//       a method as an argument.
		Student l1 = new Student("Terrence", 1, 3.45);
		Student l2 = new Student("Roberta", 2, 2.15);
		Student l3 = new Student("George", 3, 1.50);
		
		Student kid14 = new Student("John", 4, 2.36);

		obj1.insert(l1);
		obj1.insert(l2);
		obj1.insert(l3);

		// ERROR: Case sensitive. ShowAll needs to be showAll.
		// obj1.ShowAll();
		obj1.showAll();

		//this call looks good
		l3 = obj1.fetch("Terrence");
		
		System.out.println(l3.toString());

		//this call looks good
		obj1.delete("Roberta");

		//this call looks good
		obj1.showAll();

		// here you are missing the second argument to your method
		obj1.update("George", kid14);
		
		//this call looks good
		obj1.showAll();

	}

	private Student[] data; // an array of Student objects
	private int next;
	private int size;

	public StudentListings() {

		next = 0;
		size = 100;
		data = new Student[size];

	}

	public StudentListings(int s) {
		next = 0;
		data = new Student[s];
		size = s;
	}

	public boolean insert(Student newStudentListing) {
		// the structure is full
		if (next >= size) {
			return false;
		} else {
			data[next] = newStudentListing;
			next = next + 1; // prepare for the next insert
			return true;
		}
	}

	// ERROR: you are trying to assign an object of StudentListings type to a
	// Student object
	// Public StudentListings fetch(String TargetKey) {
	public Student fetch(String TargetKey) {
		// StudentListings student;
		// StudentListings temp
		Student student;

		// Access the node using a sequential search
		//ERROR: not needed
		// int i=0;

		// ERROR: why use a while here? Should be a for loop to iterate sequentially
		// through your array.
		// (I'm guessing) the if the name in data[i] compares to target key that is the
		// student
		// we want to return
		// while(i < next &&!(data[i].compareTo(targetKey)==0)
		for (int i = 0; i <= next; i++) {
			// if data item == target
			if (data[i].getName() == TargetKey) {
				student = data[i];
				return student;
			}
		}
		// if target does not exist and nothing is retrieved return null
		return null;
		
		// not sure what all this is, but its too much.
	   /* if(i== next) // node not found
	        return null; 
	   
	       // deep copy the node's information into the client's node 
	   
	        student= data[i].deepCopy(); 
	   
	       if(i!= 0) // bubble-up accessed node
	       { 
	          temp= data[i-1]; 
	          data[i-1]=data[i];
	          data[i]= temp;
	       } 
	          return student; 
	     }*/
	}

	public boolean delete(String targetKey) {
		boolean deleted = false;
		// if you want to use while loops in your functions you should separate the second condition 
		// to another if statement within it like this:
		int i = 0;
		// 2 conditions less than count and if we haven't deleted entry yet
		while (i < next || deleted == true) {
			//put the condition here, so if we find something we can return it 
			if(data[i].getName() ==  targetKey) {				
				
				//This is where you will put your deletion logic.. I'll leave that to you
				
			}
			i++;
		}
		
		//don't need this if statement
		//if (i == next) // node not found

			// move the last node into the deleted node's position
			//return false;
		//looks like you are attempting to delete the previous record out of the array here but idk.
		//either way it is not needed.
		//data[i] = data[next - 1];
		//data[next - 1] = null;
		next = next - 1;
		//return deleted instead of true. If it did delete something it will be true, else false
		return deleted; // node found and deleted 
	}


	public boolean update(String targetKey, Student newStudentListing) {
		if (delete(targetKey) == false)
			return false;
		else if (insert(newStudentListing) == false)
			return false;
		else
			return true;
	}

	public void showAll() {
		for (int i = 0; i < next; i++) {
			System.out.println(data[i].getName() + ", " + data[i].getID() + ", " + data[i].getGPA());
		}
	}
}


wirvine

Поэтому я сделал все, что мог, с той информацией, которая у меня была. Я переставил некоторые вещи, основываясь на том, что, как я думал, вы пытались сделать, но я не был уверен. Я оставил много комментариев и оставил один метод для вас, чтобы закончить.

Carmella Seals

Спасибо!