• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

pattern, matcher, podwójne wpisywanie, scanner

VPS Starter Arubacloud
0 głosów
471 wizyt
pytanie zadane 4 listopada 2016 w Java przez anhydryt Początkujący (290 p.)

Witam,

Proszę mi powiedzieć, gdzie jest błąd, że ciągle w konsoli muszę dwa razy wpisywać np. imię bądź datę urodzenia i jakbyście ulepszyli to. 

Z góry bardzo dziękuję :)

 

package kurs.kursik;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

public class InterfejsPsa {

	static Scanner sc = new Scanner(System.in);
	
	
	
		public static void main(String[] args) {
			
			Pies p1 =  new Pies();
			
			Pattern pattern = Pattern.compile("[a-zA-Z]*");
			String nameInput;
			do {
				System.out.println("Podaj imię: ");
				nameInput = getUserInput();	
				Matcher matcher = pattern.matcher(nameInput);
				if (matcher.matches()) 
				{
					p1.setImie(getUserInput());	
				}
				else 
				{
					System.out.println("Musisz podać nazwę składającą się z małych lub dużych liter.");
				}
								
			} while (p1.getImie() == null);
			
			
			
			Pattern pattern2 = Pattern.compile("([0-9]{2}.)([0-9]{2}.)([0-9]{4})");
			SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy");
					
			do {
				System.out.println("Podaj datę urodzenia:");
				Matcher matcher2 = pattern2.matcher(getUserInput());
				if(matcher2.matches()) 
				{					
					try 
					{
						p1.setData(sdf.parse(getUserInput()));
					} 
					catch(ParseException nfe) 
					{
						System.out.println("Błąd daty, prawidłowy format to Dzien.Miesiac.Rok");
					}
				} 
				else 
				{
					System.out.println("błąd2");
				}
			} while (p1.getData() == null);
			
			
			Pattern pattern3 = Pattern.compile("[0-9]+(\\.[0-9]+)?");
			String weightInput;
			do {
				System.out.println("Podaj wagę:");
				weightInput = getUserInput();
				
				if(pattern3.matcher(weightInput).matches())
				{
					try {
						p1.setWaga(Float.valueOf(getUserInput()));
					} catch(NumberFormatException ne) {
						System.out.println("Waga musi być wartością np. 20.0");
					}
				}
				else
				{
					System.out.println("błąd3");
				}
			} while (p1.getWaga() == null);
			
			System.out.println("Podaj imię opiekuna: ");
			p1.setImieOpiekuna(getUserInput());
			System.out.println("Imię " + p1.getImie() + ", data urodzenia: " +p1.getData()+ ", waga " + p1.getWaga() + ", imię opiekuna " + p1.getImieOpiekuna());
		}
	
	public static String getUserInput() {
		return sc.nextLine();
	}

}

 

3 odpowiedzi

+1 głos
odpowiedź 4 listopada 2016 przez Mateusz51 Nałogowiec (28,180 p.)

Czyżby Kobiety do Kodu?
 

A co do kodu. Musisz wpisywać dwa razy ponieważ dwa razy pobierasz. Np gdy podajesz imie sprawdzasz czy pasuje a nastepnie znowu pobierasz. Powinno być zamiast dwa razy getUserInput();

 do {
                System.out.println("Podaj imię: ");
                nameInput = getUserInput(); 
                Matcher matcher = pattern.matcher(nameInput);
                if (matcher.matches()) 
                {
                    p1.setImie(nameInput); 
                }
                else
                {
                    System.out.println("Musisz podać nazwę składającą się z małych lub dużych liter.");
                }

 

1
komentarz 4 listopada 2016 przez anhydryt Początkujący (290 p.)
Wszystko działa, dziekuję Ci bardzo, tak myślałem, że gdzieś pobieram dwa razy :).

Tak Kobiety do Kodu. Dobre ćwiczenia + Thinking in Java i javastart.pl i jakoś się toczę do celu :)

 

Pozdro
0 głosów
odpowiedź 4 listopada 2016 przez MichuDev Pasjonat (20,300 p.)
Proszę podaj cały kod (niezbędne do pomocy), i podziel go lepiej na funkcje i klasy. Main jest zdecydowanie za długi!
0 głosów
odpowiedź 4 listopada 2016 przez anhydryt Początkujący (290 p.)

package kurs.kursik;

import java.util.Date;

public class Pies {
	
	private String imie;
	private float waga;
	private Date data;
	private String imieOpiekuna;
	
	// IMIE
	public void setImie(String imie) {
		this.imie = imie;
	}
	
	public String getImie(){
		return imie;
	}
	
	
	// DATA URODZENIA
	public void setData(Date data) {
		this.data = data;
	}
	public Date getData() {
		return data;
	} 
		
	// WAGA
	public void setWaga(float waga) {
		this.waga = waga;
	}
	public Float getWaga() {
		return waga;
	}
	// IMIE OPIEKUNA
	public void setImieOpiekuna(String imieOpiekuna) {
		this.imieOpiekuna = imieOpiekuna;
	}
	public String getImieOpiekuna() {
		return imieOpiekuna;
	}

	
		
			
			
			
			
}

 

Podobne pytania

0 głosów
1 odpowiedź 335 wizyt
0 głosów
1 odpowiedź 114 wizyt
pytanie zadane 4 maja 2020 w Java przez Schulz0123 Początkujący (330 p.)
0 głosów
1 odpowiedź 799 wizyt
pytanie zadane 21 lutego 2019 w Java przez Metarinda Użytkownik (740 p.)

93,008 zapytań

141,975 odpowiedzi

321,256 komentarzy

62,350 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...