Diskuze: Pole

Java Java Pole

Avatar
Juraj Rojik
Člen
Avatar
Juraj Rojik:

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
ondra1907
Člen
Avatar
Odpovídá na Juraj Rojik
ondra1907:
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
Avatar
Juraj Rojik
Člen
Avatar
Juraj Rojik:

Ano.
Dakujem.

 
Nahoru Odpovědět 8.7.2015 17:50
Avatar
vita
Redaktor
Avatar
vita:

Ahoj, tak jak psal ondra1907, 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.