Wywoływanie metod - remedium

0

Chciałbyś jakiegoś remedium na wywoływanie metod może polecicie jakieś materiały, bo czego bym nie ruszył to zawsze na przy wywoływaniu metod a main mi się coś wykrzacza... Jest to krótka gra, a problem polega na tym że nie mogę wywołać drugiej metody;/

   public static void main(String[] args) {

        numberToGuess() // tu mie sie wykrzacza... a przyjmowanie argumrntu z losowej tablicy lub wywoalanie tej metody za pomcoa int nie działa
        int[][] easy = firstBoard();

    }
    public static int[][] firstBoard() {

        Random rnd = new Random();
        int[][] rndBoard = new int[5][5];
        for (int x = 0; x < rndBoard.length; x++) {
            for (int y = 0; y < rndBoard.length; y++) {
                rndBoard[x][y] = rnd.nextInt(100) + 1;
                rndBoard[2][2] = 0;
                System.out.printf("%4d", rndBoard[x][y]);
            }
            System.out.println();
        }
        return rndBoard;
    }

    private static int numberToGuess(int[][] rndBoard) {
        Random firstNumberToGuess = new Random();
        int number1 = firstNumberToGuess.nextInt(rndBoard.length);
        return number1;
    }
}
2

No powinieneś najpierw stworzyć plansze, a następnie ją użyć w wywołaniu numberToGuess (pamiętając o średnikach)

int[][] easy = firstBoard();
numberToGuess(easy);

(tak na początek)

0

@krsp: no ręce mi opadły... Mam nadzieję że nie tylko mi takie zaciemnienie się przytrafia... Dzięki:)

0

Nie rozumiem dlaczego metoda numberToGuess nie losuje mi liczby z randomowej tablicy. Zauważyłem że losuje mi pozyjce liczby a nie jej wartość. Poposił bym o jakąś podpowiedź.

1

Musisz wylosować pierwszą współrzędną, drugą współrzędną i za ich pomocą wyciągnąć wartość z tablicy, czyli:

       final int x = random.nextInt(rndBoard.length);
       final int y = random.nextInt(rndBoard[x].length);
       final int value = rndBoard[x][y];

Kolejny problem to to że za każdym razem tworzysz nową zmienną typu Random

1
    private static int numberToGuess(int[][] rndBoard) {
        Random firstNumberToGuess = new Random();
        int number1 = firstNumberToGuess.nextInt(rndBoard.length); // tutaj tworzysz liczbę losową z przedziału od 0 do n, gdzie n to liczba elementów w tej tablicy
        return number1; // tutaj zwracasz te liczbę
    }

a powinieneś zwrócić
return rndBoard[number1]

0

Dzięki za pomoc, teraz jest to dla mnie jasne.
Czy tworzenie nowej liczby randomowej jest takie złe?
Czy nie tworzenie nowej zmiennej wiąże się z jakąś zaawansowaną Java? (nie muszę dodawać że dopiero zacząłem nauke :))

0

Jeśli przed każdym wywołaniem random.nextInt tworzysz nowy Random random narażasz się na mniej losowy rozkład licz. Wynika to z wewnętrznej budowy generatorów pseudolosowych. Powinieneś utworzyć jeden Random random (per wątek) i używać go tak długo jak się da. Przynajmniej w ogólnym przypadku

0

Dzięki

0

Wrzucę cały kod i poproszę o komentarze moich wypocin - jakieś wskazówki, na czym powinienem się skupić i co wam przyjdzie do głowy :) Jednej rzeczy tylko mi się jeszcze nie udało zrobić dlatego poproszę o jakąś podpowiedź jak mógłbym zapętlić tę grę (bez wklejania metod ponownie). Z góry dziękuje za jakiekolwiek komentarze.


        int[][] easy = firstBoard();
        System.out.println();
        numberToGuess(easy);
        nextLvl();
        
        int[][] higher = nextBoard();
        System.out.println();
        numberToGuessNextLvl(higher);
        nextLvl();

        System.out.println();
        nextBoard();
        numberToGuessNextLvl(higher);
        nextLvl();

    }

    public static int[][] firstBoard() {
        Random rnd = new Random();
        int[][] rndBoard = new int[5][5];
        for (int x = 0; x < rndBoard.length; x++) {
            for (int y = 0; y < rndBoard.length; y++) {
                rndBoard[x][y] = rnd.nextInt(100) + 1;
                rndBoard[2][2] = 0;
                System.out.printf("%4d", rndBoard[x][y]);
            }
            System.out.println();
        }
        return rndBoard;
    }

    private static void numberToGuess(int[][] rndBoard) {
        Random firstNumberToGuess = new Random();
        final int x = firstNumberToGuess.nextInt(rndBoard.length);
        final int y = firstNumberToGuess.nextInt(rndBoard[x].length);
        final int value = rndBoard[x][y];
        System.out.println("Zagramy w grę Shultz. Patrząc w środek tablicy " +
                "gdzie jest zawsze liczba 0, dostrzeż okiem" + " " + value + " Nacisnij Y " +
                "Jeżeli Ci się udało - przejdź na wyższy lvl");
    }

    public static void nextLvl() {
        Scanner sc = new Scanner(System.in);
        String decide = sc.nextLine();
        String goNextLvl = String.valueOf('y');
        String resigantion = String.valueOf('n');

        if (decide.equals(goNextLvl)) {
            System.out.println("Udało Ci śię! Jak duża ma być nowa tablica? Pamiętaj aby wybrać liczbę nieparzystą");
        } else if (decide.equals(resigantion)) {
            System.out.println("Dzięki za grę");
            System.exit(0);
        } else {
            System.out.println("Are you retard?");
            System.exit(1);
        }
    }

    public static int[][] nextBoard() {
        Random rnd = new Random();
        Scanner sc = new Scanner(System.in);
        int howBig = sc.nextInt();
        int[][] rndNextBoard = new int[howBig][howBig];
        for (int x = 0; x < rndNextBoard.length; x++) {
            for (int y = 0; y < rndNextBoard.length; y++) {
                rndNextBoard[x][y] = rnd.nextInt(100) + 1;
                rndNextBoard[howBig / 2][howBig / 2] = 0;
                System.out.printf("%4d", rndNextBoard[x][y]);
            }
            System.out.println();
        }
        return rndNextBoard;
    }

    private static void numberToGuessNextLvl(int[][] rndNextBoard) {
        Random nextNumberToGuess = new Random();
        final int x = nextNumberToGuess.nextInt(rndNextBoard.length);
        final int y = nextNumberToGuess.nextInt(rndNextBoard[x].length);
        final int value = rndNextBoard[x][y];
        System.out.println( " Jeżli zauważyłeś liczbę: " + value + " i chcesz grać dalej naciśnij y, jeżeli chcesz przerwać naciśnij n");
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1