• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Modyfikator dostępu - private

Object Storage Arubacloud
0 głosów
393 wizyt
pytanie zadane 19 stycznia 2018 w Java przez must Bywalec (2,980 p.)

Hej, mam problem z logiką(?) programu.

W klasie 

PlayerChanger

mam metodę 

getTurn

chce by była ona prywatna, poniewaz tak to kazdy ma do niej dostęp i moze zmienic przypisaną do niej literę. Jak to obejść, bo teraz nie moge uzyc tej klasy w klasie 

Game

z tego wzgledu ze ma ona modyfikator 'private. Czy mam stworzyć getTurn w klasie Game, czy jak to zrobić?

 

Klasa PlayerChanger

package tictactoe;

public class PlayerChanger
{

    public char turn = 'X';

    public void changePlayer()
    {
        if (turn == 'X')
        {
            turn = 'O';
        }
        else
        {
            turn = 'X';
        }
    }

    private char getTurn()
    {
        return turn;
    }

}

Klasa Game:

package tictactoe;

import java.util.Scanner;

class Game {
    private BoardPrinter map = new BoardPrinter();
    private PlayerChanger playerChanger = new PlayerChanger();
    private ConditionsChecker conditionsChecker = new ConditionsChecker();
    private Scanner input = new Scanner(System.in);
    private char[][] board = new char[3][3];
    private int row, col;


    void StartGame() {

        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                board[i][j] = '_';
            }
        }

        map.printBoard(board);
        while (!(conditionsChecker.checkIfWinner(board))) {

            row = input.nextInt();
            col = input.nextInt();

            if (conditionsChecker.checkIfOutOfBoard(row, col)) {

            } else {

                if (conditionsChecker.checkIfOccupied(row, col, board)) {

                }
                else {

                    board[row - 1][col - 1] = playerChanger.getTurn;
                    map.printBoard(board);
                    playerChanger.changePlayer();

                }
            }
        }
        playerChanger.changePlayer();
        System.out.println("The winner is " + playerChanger.getTurn);
    }
}

 

2 odpowiedzi

+1 głos
odpowiedź 19 stycznia 2018 przez mbabane Szeryf (79,280 p.)
wybrane 19 stycznia 2018 przez must
 
Najlepsza
public char getTurn() 
{ 
     return turn; 
}

Spokojnie, taką konstrukcja nie będziesz wstanie nadpisać zmiennej turn.

To o czym piszesz grozi np. w przypadku List bo wtedy możesz zrobić tak:

class KlasaZLista
{
      private List<String> lista;

     public KlasaZLista()
     {
           this.lista = new ArrayList<>();
           this.lista.add("Jakis string");
      }
      public List<String> getLista()
      {   
          return lista;
      }
}


//uzycie
KlasaZLista kzl = new KlasaZLista();
println(kzl.getLista());

//a teraz, teoretycznie nie ma mozliwosci zmiany listy ale...
kzl.getLista().add("Kolejny string");
println(kzl.getLista()); // co pokaze ?

to println to jest System.out.println().

komentarz 19 stycznia 2018 przez must Bywalec (2,980 p.)

Podobno w klasie 

Game

jest mozliwość 

playerChanger.turn = 'F';

 

1
komentarz 19 stycznia 2018 przez mbabane Szeryf (79,280 p.)

A przepraszam, z przyzwyczajenia nie zauważyłem.

Zmień w tej klasie zmienną turn tak aby była prywatna i po krzyku.

 

komentarz 19 stycznia 2018 przez must Bywalec (2,980 p.)
To znaczy? W klasie PlayerChanger mam zmienić na private i co :P Dalej nie działa.

Poza tym nie rozumiem określenia jak ktoś Z ZEWNĄTRZ może dostać dostęp do mojej metody jezeli mam ja na nie private.... Nie czaje tego kompletnie.... /// to juz tak poza tematem

 

 

 

///edit nie dałem nawiasów :P

Możesz mi wytłumaczyć dlaczego wystarczyło zmienic tę zmienną na prywatną?
komentarz 19 stycznia 2018 przez mbabane Szeryf (79,280 p.)

Ma być tak:

public class PlayerChanger
{
 
    private char turn = 'X';
    
    //metoda changePlayer

    public char getTurn()
   {
         return turn;
   }
}

Poczytaj o hermetyzacji w kontekście programowania obiektowego. Jak nie będziesz rozumiał po przeczytaniu wtedy pisz i będziemy radzić.

+1 głos
odpowiedź 19 stycznia 2018 przez Wiciorny Ekspert (270,170 p.)
Problem rozwiązujący w takich przypadkach to zrozumienie:

czym są właśnie gettery i settery :)

http://akubiak.pl/2016/04/03/java-gettery-settery-i-project-lombok/

dzięki nim- mamy dostęp z zewnątrz nawet do prywtanych zmiennych

Podobne pytania

0 głosów
2 odpowiedzi 369 wizyt
pytanie zadane 30 marca 2018 w Java przez neos Początkujący (320 p.)
0 głosów
1 odpowiedź 113 wizyt
pytanie zadane 18 grudnia 2022 w PHP przez kordix Gaduła (3,910 p.)
0 głosów
1 odpowiedź 312 wizyt
pytanie zadane 25 kwietnia 2021 w Bezpieczeństwo, hacking przez MrMoon Użytkownik (960 p.)

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...