Obsługa wyjątkow

0

Napisz program, który tworzy obiekt klasy Osoba. Klasa posiada atrybuty: imię, nazwisko, wiek.
Program pozwala na uzupełnienie wartości atrybutów danymi podanymi z klawiatury. W przypadku
wpisania z klawiatury niepoprawnych wartości program „wyrzuca” wyjątek, który należy obsłużyć w
programie poprzez wypisanie komunikatu o niepoprawnie podanych danych. Wpisywany wiek musi
być liczbą w zakresie [0,100]. Imię i nazwisko muszą posiadać minimum 3 znaki.

Jak zrobić by program w jednej metodzie jeśli podamy np : imie i nazwisko mniejsze niż 3 znaki i wiek z nie poprawnego zakresu wyrzucał nam te 2 błedy?
Ciężko mi zrozumieć te wyjątki ;/
Jakieś rady?

 
 import java.util.Scanner;
 public class Osoba 
 {
   
 private String nazwisko;
 private int wiek;
 private String imie;
 
 public Osoba()
 {
  Scanner in = new Scanner(System.in);
 System.out.println("Podaj nazwisko: ");
 nazwisko=in.nextLine();
 System.out.println("podaj imie: ");
 imie=in.nextLine();
 System.out.println("Podaj wiek: ");
 wiek=in.nextInt();

 }
public  void Wyjatek()throws Exception
{
  
  if (wiek<0 || wiek>100)
   throw new Exception("wiek musi byc w zakresie 0-100!");
  
  if(imie.length()<3 || nazwisko.length()<3)
    throw new Exception("imie i nazwisko musza miec conajmniej 3 litery !");
}
 
 public static void main(String aa[] )throws Exception
 {

 Osoba osoba=new Osoba();
 osoba.Wyjatek();
 }
 }
0

Nie podoba mi się to zadanie - uczy złych nawyków, Wyjątki nie służą do kontroli poprawności danych.
Konstruktor klasy Osoba nie powinien wdawać się w dyskusje z użytkownikiem.

import java.util.Scanner;
public class Osoby 
{
    public static void main(String aa[] )
    {
        Scanner in = new Scanner(System.in);
        System.out.println("Podaj nazwisko: ");
        String nazwisko = in.nextLine();
        System.out.println("podaj imie: ");
        String imie = in.nextLine();
        System.out.println("Podaj wiek: ");
        int wiek = in.nextInt(); 
        Osoba osoba = null;
        try
        {           
            osoba = new Osoba(imie,nazwisko,wiek);
        } 
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }
        System.out.println(osoba); //dla kontroli
    }
}
class Osoba
{
    private String nazwisko;
    private int wiek;
    private String imie;
 
    public Osoba(String imie,String nazwisko,int wiek) throws Exception
    { 
        if (wiek<0 || wiek>100)
            throw new Exception("wiek musi byc w zakresie 0-100!");
        if(imie.length()<3 || nazwisko.length()<3)
            throw new Exception("imie i nazwisko musza miec conajmniej 3 litery !"); 
        this.imie = imie;
        this.nazwisko = nazwisko;
        this.wiek = wiek;       
    }
    public String toString()
    {
        return imie+" "+nazwisko+" wiek = "+wiek;
    }
 }
0

Czemu w tym przerobieniu programu jeśli wpisze np: nazwisko dobrze i wpisze imie na 2 litery,to wyskoczy mi null w wartości wieku?Siedze i zastanawiam się na tym.

0

Źle patrzysz, null to wartość zmiennej osoba - konstruktor nie skończył swojej pracy, tzn. nie skonstruował obiektu i została początkowa wartość zmiennej osoba.

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