2016-04-13 40 views
0

son elemanıyla değiştirir ve bu siteyi kontrol ettim ve başkalarının benzer problemleri varmış gibi görünüyor ama onların statik alanlardan kaynaklanıyor. Ben 2 sınıfları, bir Soruları sınıf ve Sorular uzanan bir ScienceQuestions sınıfı vardır: Aynı I ScienceQuestions sınıfı ArrayList sciQuestions elemanların tüm örneğini zamanJava ArrayList.add() dizideki tüm öğeleri

import java.util.*; 

public abstract class Questions { 

public int questionID; 
public int difficulty; 
public boolean bAsked; 
public String question; 
public ArrayList<String> answers; 
public String correctAnswer; 

public Questions addQuestion(int id, int dif, boolean asked, String q, ArrayList<String> ans, String correct) 
{ 
    questionID = id; 
    difficulty = dif; 
    bAsked = asked; 
    question = q; 
    answers = ans; 
    correctAnswer = correct; 
    return this; 
} 

} Şimdi

import java.util.ArrayList; 

public class ScienceQuestions extends Questions 
{ 
public ArrayList<Questions> sciQuestions = new ArrayList<Questions>(); 

//Add default questions 
public ScienceQuestions() 
{  
    sciQuestions.add(0, addQuestion1()); 
    sciQuestions.add(1, addQuestion2()); 
    sciQuestions.add(2, addQuestion3()); 
    System.out.println(sciQuestions.get(0).question + " " + sciQuestions.get(1).question + " " + sciQuestions.get(2).question); 
} 

//question 1 
private Questions addQuestion1() 
{ 
    int questionID = 1; 
    int dif = 1; 
    boolean asked = false; 
    String question = "What is the chemical symbol for Magneisum?"; 
    ArrayList<String> answers = new ArrayList<>(); 
    String answer1 = "Mg", answer2 = "M", answer3 = "mg", answer4 = "MG"; 
    String correctAnswer = answer1; 
    answers.add(answer1); 
    answers.add(answer2); 
    answers.add(answer3); 
    answers.add(answer4); 
    Questions thisQ = addQuestion(questionID, dif, asked, question, answers, correctAnswer); 
    return thisQ; 
} 

//question 2 
private Questions addQuestion2() 
{ 
    int questionID = 1; 
    int dif = 2; 
    boolean asked = false; 
    String question = "What is the most accurate acceleration on Earth due to gravity as sea level?"; 
    ArrayList<String> answers = new ArrayList<>(); 
    String answer1 = "9.81 m/s", answer2 = "9.81 N/Kg", answer3 = "10 m/s^2", answer4 = "10 N/Kg"; 
    String correctAnswer = answer2; 
    answers.add(answer1); 
    answers.add(answer2); 
    answers.add(answer3); 
    answers.add(answer4); 
    Questions thisQ = addQuestion(questionID, dif, asked, question, answers, correctAnswer); 
    return thisQ; 
} 

//question 2 
private Questions addQuestion3() 
{ 
    int questionID = 1; 
    int dif = 2; 
    boolean asked = false; 
    String question = "What is the order of magnitude of the gravitational constant in standard units?"; 
    ArrayList<String> answers = new ArrayList<>(); 
    String answer1 = "*10^-10", answer2 = "*10^-13", answer3 = "*10^-12", answer4 = "*10^-11"; 
    String correctAnswer = answer4; 
    answers.add(answer1); 
    answers.add(answer2); 
    answers.add(answer3); 
    answers.add(answer4); 
    Questions thisQ = addQuestion(questionID, dif, asked, question, answers, correctAnswer); 
    return thisQ; 
} 
} 

vardır eklediğim son eleman olarak. Neden?

cevap

1

Yalnızca bir örneği oluşturun ve özelliklerinin üzerine kelimesini boyutunu değiştirdi.

Yapabilirsin:

import java.util.*; 

public class Questions { 

    public int questionID; 
    public int difficulty; 
    public boolean bAsked; 
    public String question; 
    public ArrayList<String> answers; 
    public String correctAnswer; 

    public Questions(int id, int dif, boolean asked, String q, ArrayList<String> ans, String correct) { 
     questionID = id; 
     difficulty = dif; 
     bAsked = asked; 
     question = q; 
     answers = ans; 
     correctAnswer = correct; 
    } 
} 

ve ScienceQuestions.class içinde

extends Questions çıkarıp yerine

addQuestion(questionID, dif, asked, question, answers, correctAnswer); 

büyüklüğüne beri durum olamaz Yani

new Questions(questionID, dif, asked, question, answers, correctAnswer); 
+0

Teşekkür ederim, işe yarıyor. Bu yüzden işe yaramayacağı ilk kez, yeni sorular() oluşturmamanın sebebi oldu, bu yüzden addQuestion() sadece bu sınıfın bir "örneğini" etkiledi. – user3544582

+0

Tam olarak: Bir örnek/bir nesne oluşturdunuz ve bu nesneyi arraylist'e eklediniz. Ama bu referansla, yeni nesneler oluşturulmuyor. AddQuestion yöntemi sırasında nesnenin özelliklerini değiştirdiniz ve arraylist'te get (index) dediğinizde, her indeks için aynı nesneyi alırsınız, dolayısıyla son ayarladığınız parametreler aynı olur. –

0

Yanılıyor olabilirim ama sorunun, arraylist'i parametre olmayan bir kurucuyla başlatmanızın olabileceğini düşünüyorum. Bu, bir arraylistin 1 büyüklüğünde bir örneğini oluşturabilir. Ekleme, listenin sonuna eklenir (ve kapasiteyi artırmaz). Burada açıklandığı gibi Belki bir boyutu ile örnekleriz olmalıdır:

Constructor with initial capacity

düzenleme: kapasite

+0

ile benim arilist hala 3 – user3544582

İlgili konular