2015-09-04 83 views
0

讓家庭作業有這個東西,代碼被賦予給我們一個數組,我們必須將它轉換爲數組列表。從數組改變東西到數組列表

這裏是硬件問題:修改Programmer類,使技術數組數據成員是String的ArrayList。另外,讓addTechnology更加複雜一點:如果我們試圖將技術'技術'添加到已經在其數組列表中有'tech'的程序員,那麼不應該對數組列表進行更改。 (也就是說,addTechnology操作在這種情況下什麼都不做)。另外,修改getSalary方法,以便每個知道Java的程序員獲得額外的$ 3000獎金。因此,例如,知道C++能掙$ 5000個獎金,但我們知道的Java賺$ 8000個

這裏是原代碼:

public class Programmer extends Employee 
{ 
    private String[] technologies; 

    public Programmer(String name, String ssn) 
    { 
     super(name, ssn, 65000.00); 
     technologies = new String[0]; 
    } 

    public void addTechnology(String tech) 
    { 
     String[] newArray = new String[technologies.length + 1]; 
     for (int i = 0; i < technologies.length; i++) 
      newArray[i] = technologies[i]; 
     newArray[technologies.length] = tech; 
     technologies = newArray; 
    } 

    public double getSalary() 
    { 
     return super.getSalary() + technologies.length * 5000.00; 
    } 

    /*public String toString() 
    { 
     String returnVal = "Programmer " + super.toString() + " and knows"; 
     for (String tech : technologies) 
     { 
      returnVal += " " + tech; // Note: Inefficient due to String concatenation. 
             // Also lacks punctuation. 
     } 
     return returnVal; 
    }*/ 

    public String toString() 
    // This version inserts commas between the technologies 
    // It also generates the string efficiently, using a StringBuilder object. 
    { 
     StringBuilder returnVal = new StringBuilder("Programmer "); 
     returnVal.append(super.toString()); 
     if (technologies.length > 0) 
     { 
      returnVal.append(" and knows "); 
      if (technologies.length == 1) 
      { 
       returnVal.append(technologies[0]); 
      } 
      else if (technologies.length == 2) 
      { 
       returnVal.append(technologies[0]); 
       returnVal.append(" and "); 
       returnVal.append(technologies[1]); 
      } 
      else 
      { 
       for (int i = 0; i < technologies.length - 1; i++) 
        returnVal.append(technologies[i] + ", "); 
       returnVal.append("and "); 
       returnVal.append(technologies[technologies.length - 1]); 
      } 
     } 
     return returnVal.toString(); 
    } 
} 

和這裏是我目前有:

import java.util.*; 

public class Programmer extends Employee 
{ 
    ArrayList<String> technologies = new ArrayList<>(); 

    public Programmer(String name, String ssn) 
    { 
     super(name, ssn, 65000.00); 

    } 

    public void addTechnology(String tech) 
    { 
     if (technologies.contains(tech)) 
      System.out.println("The technology is already contained in the array"); 
     else 
      technologies.add(tech); 
     // 
    } 

    public double getSalary() 
    { 
     double salary = super.getSalary() + technologies.size() * 5000.00; 
     if(technologies.contains("Java")){ 
      salary = salary + 3000; 
      return salary; 
     } 
     else 
      return salary; 

    } 

    /*public String toString() 
    { 
     String returnVal = "Programmer " + super.toString() + " and knows"; 
     for (String tech : technologies) 
     { 
      returnVal += " " + tech; // Note: Inefficient due to String concatenation. 
             // Also lacks punctuation. 
     } 
     return returnVal; 
    }*/ 

    public String toString() 
    // This version inserts commas between the technologies 
    // It also generates the string efficiently, using a StringBuilder object. 
    { 
     StringBuilder returnVal = new StringBuilder("Programmer "); 
     returnVal.append(super.toString()); 
     if (technologies.size() > 0) 
     { 
      returnVal.append(" and knows "); 
      if (technologies.size() == 1) 
      { 
       returnVal.append(technologies.indexOf()); 
      } 
      else if (technologies.size() == 2) 
      { 
       returnVal.append(technologies[0]); 
       returnVal.append(" and "); 
       returnVal.append(technologies[1]); 
      } 
      else 
      { 
       for (int i = 0; i < technologies.size()- 1; i++) 
        returnVal.append(technologies[i] + ", "); 
       returnVal.append("and "); 
       returnVal.append(technologies[technologies.length - 1]); 
      } 
     } 
     return returnVal.toString(); 
    } 
} 

我問題在代碼的底部,在toString方法中,我如何更改數組列表的內容?

+0

太多的代碼,請確定您的問題,你的代碼修剪到最低 – Dici

回答

0

我的問題是在代碼的底部,在toString方法中, 我如何更改數組列表?

你可以寫你的toString()方法象下面這樣: -

public String toString() 
    // This version inserts commas between the technologies 
    // It also generates the string efficiently, using a StringBuilder object. 
    { 
     StringBuilder returnVal = new StringBuilder("Programmer "); 
     returnVal.append(super.toString()); 
     if (technologies.size() > 0) 
     { 
      returnVal.append(" and knows "); 
      for(String technology:technologies){ 
       returnVal.append(technology).append(","); 
      } 
     } 
     return returnVal.substring(0, returnVal.lastIndexOf(",")).toString(); 
    } 
+0

太感謝你了! – KeyLimePi

1

要從ArrayList檢索值,請使用get(int)方法。

當使用的陣列,符號array[i]既用於獲取和設置值:

int[] array = new int[10]; 
array[0] = 1; 
int i; 

i = array[0]; 
array[0] = i; 

當使用一個數組列表,每一個都有其自己的方法:

ArrayList<int> array_list = new ArrayList<int>(); 
array_list.add(1); 
int i; 

i = array_list.get(0); 
array_list.set(0, i);