簡體   English   中英

如何跨不同的類訪問我的私有變量?

[英]How can I access my private variables across different classes?

我正在開發類似子手的游戲。 它從一個包含四個字母詞的.txt文件中讀取並隨機選擇一個詞,然后播放器將嘗試7次猜測該詞...我還沒有完全完成,我無法從一個詞訪問變量班級到另一個。 這是我的代碼:

package wordguessinggame2;
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.*;

public class WordGuessingGame2 {

    static class RandomWordProvider {

        public final List<String> words;

        public RandomWordProvider() {
        words = readFile();
    }

    public int randomInteger() {
        int randomInt = (int) (Math.random() * words.size());
        return randomInt;
    }

    private String getWord() {
        int randomPosition = randomInteger();
        String randomWord = words.get(randomPosition);
        return randomWord;
    }

    private List<String> readFile() {

        List<String> wordsList = new ArrayList<>();

        try {
            File fourLetterWords = new File(System.getProperty("user.home"),"Documents/FourLetterWords.txt");
            Scanner in = new Scanner(fourLetterWords);

        while (in.hasNextLine()) {
            String line = in.nextLine();
            if (line!=null && !line.isEmpty()) {
                wordsList.add(line);
            }
        }
    } 
    catch (FileNotFoundException ex) {
        System.out.println("File not found.");
    }
    return wordsList ;
    }
}
    public static class PlayerCharacterEntry {

        private String playerEntry() {
            Scanner characterEntry = new Scanner(System.in);
            System.out.print("Enter a character: ");
            String playerInput = characterEntry.next();
            playerInput = playerInput.toUpperCase();
            return playerInput;
    }
}

    public static void main(String[] args) {

        Scanner wantToPlay = new Scanner(System.in);
        System.out.print("Welcome to the word guessing game! Would you like to play? ");
        String playerAnswer = wantToPlay.next();

        if (playerAnswer.equalsIgnoreCase("Yes")) {
            System.out.print("\nYour objective is to guess a four letter word by entering"
            + "\nletters on your keyboard. If you can not guess the word in seven attempts,"
            + "\nyou lose! You will be told if the letter you entered is in the word, and"
            + "\nyou will be told if the letter you entered is not in the word. You will be"
            + "\nallowed to guess the word any time during your seven attempts. If at anytime"
            + "\nyou would like to terminate the game, enter the word 'terminate'. Good Luck!"
            + "\n \n");
    }
        if (playerAnswer.equalsIgnoreCase("No")) {
            System.out.print("Maybe another time!");
            System.exit(0);
    }

RandomWordProvider randomWordProvider = new RandomWordProvider();
PlayerCharacterEntry playerCharacterEntry = new PlayerCharacterEntry();

randomWordProvider.getWord();
playerCharacterEntry.playerEntry();

if (randomWord.containsIgnoreCase(playerInput)){

    }

}
}

在底部,我試圖從其他類訪問randomWord和playerInput,但是我不知道該怎么做。 我對編程還是很陌生,所以我還不知道該怎么做。 我會為每個變量執行get和set方法嗎? 我已經嘗試過這樣做,但是我遇到了很多麻煩。 如果有人可以告訴我如何跨類訪問變量,將不勝感激!

這是一個稍微簡化的示例,其中RandomWordProviderPlayerCharacterEntry類未嵌套在WordGuessingGame2 我只顯示需要修改的方法:

class RandomWordProvider {   
    String getWord() {
        int randomPosition = randomInteger();
        String randomWord = words.get(randomPosition);
        return randomWord;
    }

    // ...
}

class PlayerCharacterEntry {
    String playerEntry() {
        Scanner characterEntry = new Scanner(System.in);
        System.out.print("Enter a character: ");
        String playerInput = characterEntry.next();
        playerInput = playerInput.toUpperCase();
        return playerInput;
    }
}

class WordGuessingGame2 {
    public static void main(String[] args) {

        // ...

        RandomWordProvider randomWordProvider = new RandomWordProvider();
        PlayerCharacterEntry playerCharacterEntry = new PlayerCharacterEntry();

        randomWordProvider.getWord();
        playerCharacterEntry.playerEntry();
    }
}

請注意,我放棄了private的來自調節劑getWordplayerEntry方法,否則他們是不會從訪問WordGuessingGame2

最好從最嚴格的修飾符開始,然后根據需要減少限制。

不可以,只能從其自身的類內部訪問私有變量。 強烈建議您創建公共獲取程序和設置程序,以維護OO封裝原則。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM