まず、悪いタイトルをお詫び申し上げます。私はこのエラーを説明しようと努力しました。私は、次のクラスで作成しているGUIアプリケーションを持っています:Click here to see my classes.クラスの設定はGUIではアクセスできますが、宝くじではないという非常に奇妙な問題が発生しました。 GUIでは、GUIで作成したSettingsオブジェクトを通じてメソッドを呼び出すことができます。しかし、私がそれらを宝くじから呼び出すときは、何も返しません。 私はすでに宝くじに設定オブジェクトを作成しています。設定の値を設定した後、ボタンをクリックすると、以下のコードが実行されます。Javaクラスが別のクラスのメソッドを正しく実行していない
public void initialize(){
teams = settings.getTeams();
pick = settings.getNumberOfTeams();
//Returns nothing^
//teams and pick is a local varible
}
上記の可変部分は、設定しても何もありません。 Settingsクラス内からgetTeams()を呼び出すと、以下の正しい値が返されるため、既に設定されていることがわかります。
public void addTeam(String name, String wins, String losses){
teams.add(new Team(name, wins, losses));
System.out.println(teams.size() - 1 + " " + teams.get(teams.size() - 1));
System.out.println("Number of teams (SETTINGS): " + getNumberOfTeams());
}
ただし、宝くじから呼び出されたときは、何も表示されません。しかし、GUIからSettingsを呼び出すと、正しく戻りますが、他のクラスは返されません。注:各クラス、個別の設定オブジェクトが作成されます。 もう1つの興味深いのは、私のIDEは、上記の別のクラスから明示的に呼び出すのにもかかわらず、メソッドがプライベートであると言います。これを参照してください:It's hard to see but Public is highlighted saying it can be private
私は通常、エラーを見つけるのがうまいですが、これは私に約1週間私を困らせました。何かが助けになるでしょう。それが役立つなら、私はまた、以下の完全な宝くじと設定のクラスを入れます。ちょうど注意:設定のローカル変数は既に設定されており、設定自体でアクセスできます。
宝くじクラス:
public class Lottery {
Settings settings = new Settings();
private Random rand = new Random();
private int randNum;
private int pick;
private ArrayList<Team> draftOrder = new ArrayList<Team>(0);
private ArrayList<Team> teams = new ArrayList<Team>(0);
private boolean lotteryDone;
public Lottery(){}
public void initialize(){
teams = settings.getTeams();
System.out.println("Lottery team size: " + teams.size());
pick = settings.getNumberOfTeams();
System.out.println("Number of Teams (From lottery): " + pick);
System.out.println("Number of teams (LOTTO): " + pick);
System.out.println("Test..." + settings.getDraftRounds());
teams.add(settings.getTeam(1));
System.out.println("Other method test: " + teams.get(0));
}
public void setDraftOrder(){
while (teams.size() > 0){
randNum = rand.nextInt(teams.size() - 1);
System.out.println(randNum);
draftOrder.add(teams.remove(randNum));
System.out.println(draftOrder.get(0));
}
}
public void getNextPick(){
if (pick > 0){
randNum = rand.nextInt(teams.size() - 1);
draftOrder.add(pick, teams.remove(randNum));
pick -= 1;
}
}
public int getPickNumber(){
return pick;
}
public Team getCurrentPick(int i){
return draftOrder.get(i);
}
public ArrayList<Team> getDraftOrder(){
return draftOrder;
}
public boolean lotteryDone(){
if (lotteryDone){
return true;
}else{
return false;
}
}
セッティングクラス:
public class Settings {
private ArrayList<Team> teams = new ArrayList<Team>(0);
private Boolean skipLottery;
private Boolean autoSelectPick;
private int autoSelectPickTimer;
private int totalMoney;
private int yellowOverlay;
private int draftRounds;
private int draftPickTimer;
private int draftTickTimer;
private int currentRound;
private int currentPick;
private boolean lotteryInitialized;
private boolean draftInitialized;
private boolean auctionInitialized;
public void addTeam(String name, String wins, String losses){
teams.add(new Team(name, wins, losses));
System.out.println(teams.size() - 1 + " " + teams.get(teams.size() - 1));
System.out.println("Number of teams (SETTINGS): " + getNumberOfTeams());
}
public boolean settingsDone(){
if (teams.size() != 0 && totalMoney != 0 && yellowOverlay != 0 && draftRounds != 0 && draftPickTimer != 0 && draftTickTimer != 0){
return true;
}else{
return false;
}
}
public void clearSettings(){
teams.clear();
skipLottery = false;
autoSelectPick = false;
autoSelectPickTimer = 0;
totalMoney = 0;
yellowOverlay = 0;
draftRounds = 0;
draftPickTimer = 0;
draftTickTimer = 0;
currentRound = 0;
currentPick = 0;
lotteryInitialized = false;
draftInitialized = false;
auctionInitialized = false;
}
public void setSkipLottery(boolean i){
skipLottery = i;
}
public boolean getSkipLottery(){
return skipLottery;
}
public void setAutoSelectPick(boolean i){
autoSelectPick = i;
}
public boolean getAutoSelectPick(){
return autoSelectPick;
}
public void setAutoSelectPickTimer(int i){
autoSelectPickTimer = i;
}
public int getAutoSelectPickTimer(){
return autoSelectPickTimer;
}
public void setTotalMoney(int i){
totalMoney = i;
}
public int getTotalMoney(){
return totalMoney;
}
public void setYellowOverlay(int i){
yellowOverlay = i;
}
public int getYellowOverlay(){
return yellowOverlay;
}
public void setDraftRounds(int i){
draftRounds = i;
}
public int getDraftRounds(){
return draftRounds;
}
public void setDraftPickTimer(int i){
draftPickTimer = i;
}
public void setDraftTickTimer(int i){
draftTickTimer = i;
}
public ArrayList<Team> getTeams(){
return teams;
}
public Team getTeam(int index){
return teams.get(index);
}
public int getNumberOfTeams(){
return teams.size();
}
public int getDraftPickTimer(){
return draftPickTimer;
}
public int getDraftTickTimer(){
return draftTickTimer;
}
public void setLotteryInitialized(boolean i){
lotteryInitialized = i;
}
public boolean getLotteryInitialized(){
return lotteryInitialized;
}
public void setDraftInitialized(boolean i){
draftInitialized = i;
}
public boolean getDraftInitialized(){
return draftInitialized;
}
public void setAuctionInitialized(boolean i){
auctionInitialized = i;
}
public boolean getAuctionInitialized(){
return auctionInitialized;
}
私は、あなたが設定しているものと読んでいるものの両方が、複数の設定オブジェクトを持っていると思います。私はあなたのデバッガのコードをステップ実行して、この値がどこに設定されているのか、なぜそれが期待したものではないのかを確認します。 –
デバッガを使用します。コードをステップ実行します。単純なブレークポイントで十分であれば、入力と書式の量を調べる – efekctive
コードで 'new Settings()'を検索してください。それは一度だけ起こるべきです。何度も@PeterLawreyが示唆するように、複数のオブジェクトがあります。一つは更新され、もう一つは更新されません。参考文献と、必要に応じて参照を渡す方法について学び、問題を解決します。私たちの助けが必要な場合は、有効な[mcve] - および**のコードを作成して投稿する必要があります。 –