Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
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
ondra1907
Člen
Avatar
Odpovídá na Juraj Rojik
ondra1907: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
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
Redaktor
Avatar
vita:27.8.2015 13:04

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.