• 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

Object Storage Arubacloud
0 głosów
392 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ź 315 wizyt
0 głosów
1 odpowiedź 103 wizyt
pytanie zadane 4 maja 2020 w Java przez Schulz0123 Początkujący (330 p.)
0 głosów
1 odpowiedź 758 wizyt
pytanie zadane 21 lutego 2019 w Java przez Metarinda Użytkownik (740 p.)

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...