проблема со списками массивов - PullRequest
0 голосов
/ 20 марта 2012

Я делаю проект, и вместо массива я решил, что список массивов будет лучше.Я знаю, что мне нужно объявить список массивов и его методы, но я не очень уверен, куда идти дальше.Какие-либо предложения?Вот код ...

public class Student {

    private String name;
    private int[] tests;

    public Student() {
        this("");
    }

    public Student(String nm) {
        this(nm, 3);
    }

    public Student(String nm, int n) {
        name = nm;
        tests = new int[n];
        for (int i = 0; i < tests.length; i++) {
            tests[i] = 0;
        }
    }

    public Student(String nm, int[] t) {
        tests = new int[t.length];
    }

    public Student(Student s) {
        this(s.name, s.tests);
    }

    public int getNumberOfTests() {
        return tests.length;
    }

    public void setName(String nm) {
        name = nm;
    }

    public String getName() {
        return name;
    }

    public void setScore(int i, int score) {
        tests[i - 1] = score;
    }

    public int getScore(int i) {
        return tests[i - 1];
    }

    public int getAverage() {
        int sum = 0;
        for (int score : tests) {
            sum += score;
        }
        return sum / tests.length;
    }

    public int getHighScore() {
        int highScore = 0;
        for (int score : tests) {
            highScore = Math.max(highScore, score);
        }
        return highScore;
    }

    public String toString() {
        String str = "Name:    " + name + "\n";
        for (int i = 0; i < tests.length; i++) {
            str += "test " + (i + 1) + ":  " + tests[i] + "\n";
        }
        str += "Average: " + getAverage();
        return str;
    }

    public String validateData() {
        if (name.equals("")) {
            return "SORRY: name required";
        }
        for (int score : tests) {
            if (score < 0 || score > 100) {
                String str = "SORRY: must have " + 0 + " <= test score <= " + 100;
                return str;
            }
        }
        return null;
    }
}

Ответы [ 5 ]

3 голосов
/ 20 марта 2012

Я подумал, что список массивов будет лучше

Может быть. Возможно, нет. Это зависит. Похоже, вы получите выгоду от использования одного на основе ArrayList API?

Если ваш «список» никогда не меняет размер, и вам не нужно ничего находить в нем, то массив так же хорош.

Я знаю, что мне нужно объявить список массивов и его методы, но я не слишком уверен, куда идти оттуда

Вам необходимо создать ссылку на экземпляр ArrayList. Это так просто, как

List<Integer> myList = new ArrayList<Integer>();

в объявлении вашего класса. Вам не нужно «объявлять его методы». Когда у вас есть ссылка на объект, вы можете вызывать его методы.

0 голосов
/ 21 марта 2012

Я пытался изменить массив на arraylist. Ответьте, если это не скомпилировано правильно.

import java.util.ArrayList;

ученик публичного класса {

private String name;
// private int[] tests;
private ArrayList<Integer> tests;

public Student() {
    this("");
}

public Student(String nm) {
    // this(nm, 3);
    name = nm;
}

/*
 * public Student(String nm, int n) { name = nm; tests = new int[n]; for
 * (int i = 0; i < tests.length; i++) { tests[i] = 0; } }
 */

/*
 * public Student(String nm, int[] t) { tests = new int[t.length]; }
 */

public Student(Student s) {
    this(s.name, s.tests);
}

public Student(String name2, ArrayList<Integer> tests2) {
    name = name2;
    tests = tests2;
}

public int getNumberOfTests() {
    return tests.size();
}

public void setName(String nm) {
    name = nm;
}

public String getName() {
    return name;
}

// public void setScore(int i, int score) {
// tests[i - 1] = score;
public void setScore(int score) {

    tests.add(score);

}

public int getScore(int i) {
    // return tests[i - 1];
    return tests.get(i - 1);
}

public int getAverage() {
    int sum = 0;
    for (int score : tests) {
        sum += score;
    }
    // return sum / tests.length;
    return sum / tests.size();
}

public int getHighScore() {
    int highScore = 0;
    for (int score : tests) {
        highScore = Math.max(highScore, score);
    }
    return highScore;
}

public String toString() {
    String str = "Name:    " + name + "\n";
    for (int i = 0; i < tests.size(); i++) {
        str += "test " + (i + 1) + ":  " + tests.get(i) + "\n";
    }
    str += "Average: " + getAverage();
    return str;
}

public String validateData() {
    if (name.equals("")) {
        return "SORRY: name required";
    }
    for (int score : tests) {
        if (score < 0 || score > 100) {
            String str = "SORRY: must have " + 0 + " <= test score <= "
                    + 100;
            return str;
        }
    }
    return null;
}

public ArrayList<Integer> getTests() {
    return tests;
}

public void setTests(ArrayList<Integer> tests) {
    this.tests = tests;
}

}

0 голосов
/ 21 марта 2012

Все используемые вами операции отражаются в API ArrayList.Стоит отметить, что вы не можете объявить ArrayList примитивных типов, но для каждого из примитивных типов существует Объект, который является коробочной версией примитива.

В штучной упаковке int - Integer,таким образом, у вас есть

ArrayList<Integer> myList = new ArrayList<Integer>();

Оттуда вам нужно найти методы, которые вам понадобятся для манипулирования массивом.Например, если вы хотите добавить число 42 в конец массива, вы бы сказали:

myList.add(42);

ArrayList API находится здесь .

0 голосов
/ 20 марта 2012

Чтобы использовать ArrayList, вам просто нужно объявить и создать его экземпляр:

// <SomeObject> tells Java what kind of things go in the ArrayList
ArrayList<SomeObject> aDescriptiveNameHere = new ArrayList<SomeObject>();

// This is also valid, since an ArrayList is also a List
List<SomeObject> list = new ArrayList<SomeObject>();

Затем вы можете добавлять вещи с помощью метода add():

// Please don't name your list "list"
list.add(new Thing(1));
list.add(new Thing(2));

Вы можете получитьчто-то по индексу (как вы бы с someArray[index]) как:

list.get(index);
// For example
Thing t = list.get(5);

Возможно, вам также нужен size().

См. JavaDocs для получения дополнительной информации.

0 голосов
/ 20 марта 2012

Я думаю, что может быть лучше использовать stl vector вместо того, чтобы создавать свои собственные массивы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...