Wątek przeniesiony 2017-03-07 12:33 z Java przez bogdans.

Scanner, interfejs, implementacja

0

Witam serdecznie mam problem z wykorzystaniem metody Scanner, w zadaniu na studia.
Mianowicie gdy próbuje utworzyć obiekt kompilator mieli i mieli i przemielić nie może ;(
a oto polecenie
1. Zdefiniować interfejs IBazaz metodami wyswietl() i wczytaj()

package cw4;

/**
 *
 * @author młoda
 */
public interface IBaza {
    void wyswietl();
    void wczytaj();   
}

2. Zdefiniować klasę Osoba z polami chronionymi: nazwisko, imię, pesel, która implementuje metody interfejsu IBaza oraz definiuje 2 konstruktory (jeden z parametrami pozwalającymi ustawić dane o osobie, drugi bez parametrów) . Do implementacji metody wczytaj(),która ma realizować pobieranie danych o osobie z klawiatury, wykorzystać klasę Scanner

import java.util.Scanner;

/**
 *
 * @author młoda
 */
public class Osoba implements IBaza{
    protected String nazwisko="nazwisko",imie="imie",pesel="pesel";

    public Osoba() {
    }
    
     public Osoba(String n,String i,String p) {
         nazwisko=n;
         imie=i;
         pesel=p;
    }
    

    /**
     *
     */
    @Override
    public void wczytaj() {
      Scanner wczytaj = new Scanner (System.in);
      String i = wczytaj.next();
      String n = wczytaj.next();
      String p = wczytaj.next();
            
        }
     @Override
    public void wyswietl() {
        wczytaj();
        System.out.print("Osoba{" + "nazwisko=" + nazwisko + ", imie=" + imie + ", pesel=" + pesel + '}');
    }
    
    
    
}

coś musi być nie tak w metodzie wczytaj, bo bez tego kompilator funkcjonuje ale jak ja wywołam to już nie może dokończyć
p.s. korzystam z netbeans'a

0
  1. Kompilator kompiluje kod, a u ciebie jest problem z działaniem programu, juz po kompilacji.
  2. Scanner może wisieć i czekać na dane. Na pewno podajesz poprawnie input?
0

Nie mam na razie czego podać, bo nie wyswietla mi w ogóle pobierania danych

public class Cw4 {
   static Osoba Osoba1;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        Osoba1 = new Osoba();
        Osoba1.wczytaj();
        Osoba1.wyswietl(); 
    }
    
}
0

Z tego względu że jak tworze sam obiekt, to kompilator buduje.
Ale jak wywołam metode wczytaj czy wyswietl to już mieli w nieskończoność,

0

Przetestowałem u siebie, działa, z tym, że w metodzie wczytaj tylko pobierasz dane od użytkownika, ale ich nie przypisujesz do pól w klasie Osoba.
Poza tym, metody wyswietl() i wczytaj() powinny być niezależne od siebie, we wczytaj tylko powinno być pobranie danych i przypisanie do pól, w metodzie wyswietl powinno być tylko ich wyświetlenie. W obecnej sytuacji najpierw pobierasz od użytkownika 3 stringi, a potem, wywołując wyswietl, jeszcze raz pobierasz od użytkownika 3 stringi.

0

Ok, ale wiesz że jak uruchomisz ten program to on czeka na 3 stringi? Jak go uruchomisz to wpisz imię, wciśnij enter, wpisz nazwisko, wcisnij enter. wpisz pesel i enter. Powinno Ci wyskoczyć wyświetlenie.

0

Nie wyświetlasz żadnego komunikatu typu "Podaj imię", dlatego nic się nie pokazuje i może wyglądać, jakby mieliło bez końca. W twoim przypadku, jak wywołujesz najpierw wczytaj(), a potem wyswietl(), to będzie program czekał na 6 stringów od użytkownika, chyba, że usuniesz wywołanie wczytaj() z metody wyswietl().

0

Zmienilam metody wyswietl i wczytaj ale niestety kompilator dalej mieli w nieskończoność nie mam pojecia o co chodzi

     */
    @Override
    public void wczytaj() {
      Scanner wczytaj = new Scanner (System.in);
      String i = wczytaj.next();
      imie = i;
      String n = wczytaj.next();
      nazwisko = n;
      String p = wczytaj.next();
      pesel = p;
        }
     @Override
    public void wyswietl() {
        System.out.print("Osoba{" + "nazwisko=" + nazwisko + ", imie=" + imie + ", pesel=" + pesel + '}');
    }
0

Tak jak zaznaczył Shalom, to nie kompilator ci mieli, tylko program. Poza tym, po czym stwierdzasz, że ci mieli? Próbowałaś coś pisać i kliknąć enter 3 razy? W konsoli nic ci się nie pokaże, po prostu wpisz imię, kliknij enter, nazwisko, enter, pesel, enter i wtedy zadziała.

0

Naucz się wstawiać kod na forum. Po kolejnym źle wstawionym kodzie, wątek wyląduje w koszu.

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