将事物从Array更改为ArrayList

时间:2015-09-04 20:35:18

标签: java arrays arraylist

将此内容用于家庭作业,代码以数组形式提供给我们,我们必须将其转换为arraylist。

这是硬件问题:修改Programmer类,以便arts数组数据成员是String的ArrayList。另外,使addTechnology更复杂一点:如果我们尝试将Technology'tech'添加到已经在其数组列表中具有'tech'的Programmer中,那么不应该对数组列表进行任何更改。 (即,在这种情况下,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方法中,我如何更改arraylist的那些?

3 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:0)

只需使用ArrayList.get(int index)方法获取该索引处的对象即可。是array[i]等价物。

technologies.get(i);

答案 2 :(得分:0)

  

我的问题是在代码的底部,在toString方法中,怎么做   我为arraylist换了那些?

您可以编写如下的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();
    }