NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Juraj Rojik
Člen
Avatar
Juraj Rojik:8.7.2015 17:21

Ahojte.

Aj ked je to mozno jednoduche no prosim aj tak o radu. Kde je v tomto kode chyba? Nedokaze to skompilovat. Za radu vopred dakujem.

import java.util.Arrays;

public class Citaj{

        public int vyska,sirka;
        public int[][] pole = new int[1][1];
        pole[0][0] = 1;

        public void vypis(){
                System.out.println("pole je: "+pole[0][0]);
        }
}

import java.util.*;

public class Hlava{
        public static void main(String[] args){
                Citaj cit = new Citaj();
                Scanner sc = new Scanner(System.in);

                cit.vyska = sc.nextInt();
                cit.sirka = sc.nextInt();
                cit.vypis();
        }
}
 
Odpovědět
8.7.2015 17:21
Avatar
Odpovídá na Juraj Rojik
Neaktivní uživatel:8.7.2015 17:35
pole[0][0] = 1;

Nemůžeš měnit hodnoty proměnných mimo metody, teda aspoň NetBeans se to nelíbilo. Nejjednodušší to bude dát do konstruktoru.

Nahoru Odpovědět
8.7.2015 17:35
Neaktivní uživatelský účet
Avatar
Juraj Rojik
Člen
Avatar
Juraj Rojik:8.7.2015 17:50

Ano.
Dakujem.

 
Nahoru Odpovědět
8.7.2015 17:50
Avatar
vita
Tvůrce
Avatar
vita:27.8.2015 13:04

Ahoj, tak jak psal Neaktivní uživatel, problém je v tom, že modifikuješ proměnnou mimo metodu. Pokud používáš nějaké vývojové prostředí, mělo by tě na to upozornit (to že ti to nejde zkompilovat je výsledek chyby v kódu).

Řešení:

public class Citaj {

        public int vyska, sirka;
        public int[][] pole = new int[1][1];

        public Citaj() {
                this.pole[0][0] = 1;
        }

        public void vypis() {
                System.out.println("pole je: " + pole[0][0]);
        }
}

Nyní ti to sice půjde zkompilovat, ale výsledkem programu bude vždy (bez ohledu na to, co načteš pomocí Scanner):

pole je: 1

Je to z toho důvodu, že v metodě main přiřazuješ hodnoty proměnným sirka a vyska, ale metodou Citaj#vypis() vypisuje hodnotu proměnné pole na indexu [0][0]. Tam je defaultně vložen integer 1. Upřímně řečeno, pole vůbec nepotřebuješ, protože objekt Citaj obsahuje property sirka a vyska, kterému nastavuješ hodnotu dle toho, co je načteno pomocí Scanner.

Řešení:

Třída Hlava.java zůstává stejná.

Třída Citaj.java

public class Citaj {

        public int vyska;
        public int sirka;

        public void vypis() {
                System.out.println("šířka je: " + sirka + ", výška je: " + vyska);
        }
}

Výstup:

7
5
šířka je: 5, výška je: 7

Ještě bych doporučil nepoužívat přímý přístup k proměnným sirka a vyska, ale pomocí public metod set a get a proměnné nastavit na private (zapouzdřit).

Řešení:

Citaj.java

public class Citaj {

        private int vyska;
        private int sirka;

        public void vypis() {
                System.out.println("šířka je: " + sirka + ", výška je: " + vyska);
        }

        public int getVyska() {
                return vyska;
        }

        public void setVyska(int vyska) {
                this.vyska = vyska;
        }

        public int getSirka() {
                return sirka;
        }

        public void setSirka(int sirka) {
                this.sirka = sirka;
        }
}

Hlava.java

public class Hlava {

        public static void main(String[] args) {
                Citaj cit = new Citaj();
                Scanner sc = new Scanner(System.in);

                // Výšku a šířku setuji pomocí metod.
                cit.setVyska(sc.nextInt());
                cit.setSirka(sc.nextInt());
                cit.vypis();
        }
}
 
Nahoru Odpovědět
27.8.2015 13:04
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.