Zadanko, help

AI
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:39
0

Hej,

Potrzebuje pomocy. Napisałem taki kod i nie do końca wiem, dlaczego to mi nie działa i nie przeskakuje dalej. Kolejny problem to, że jak stworzyłem nowy String to nie za bardzo wiem jak przypisać nową zmienną name albo int do pierwszego obiektu. Ktoś pomoże ? : )

Kopiuj
package com.company;
import java.util.Scanner;
import java.util.regex.Pattern;

import static java.util.regex.Pattern.matches;

public class Main {
    public static void main(String[] args) {


        Person person1 = new Person();
        Person person2 = new Person();
        Scanner sc1 = new Scanner(System.in);

        // 1 Person nmae
        System.out.println("Enter a name: ");
        String name;
        boolean valid = true;
        do {
            name = sc1.next();
            if (checkName(name))
            {
                valid = false;
                person1.setName(sc1.nextLine());
            }
            else
                {
                System.out.println("Enter your name again");
            }
        }
            while (valid);



        // 2 Person age
        System.out.println("Enter an age");
        String age;
        boolean x = true;
        do {
                age = sc1.nextLine();
                if (checkAge(age))
                {
                x = false;
                }
                else
                {
                    System.out.println("Enter your age again");
                }

        } while (x);
        person1.setAge(Integer.valueOf(age));


        System.out.println("Enter a name: ");
        person2.setName(sc1.nextLine());
        System.out.println("Enter an age");
        person2.setAge(Integer.valueOf(sc1.nextLine()));
        System.out.println("you should of typed number");


        if (person1.getAge() > person2.getAge())
        {
            System.out.println(person1.getName() + "is older and was born" + (2019-person1.getAge()));
        }
        else if (person1.getAge() < person2.getAge())
        {
            System.out.println(person2.getName() + "is older and was born" + (2019-person2.getAge()));
        }
        else {
            System.out.println(person1.getName() + "and" + person2.getName() + "have the same age and were born" + (2019 - person1.getAge()));
        }

    }
    public static class Person{
        private String name;
        private int age;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }
    public static  boolean checkName(String name) {
         return Pattern.matches("[a-zA-Z]", name);
    }
    public static boolean checkAge(String age) {
        return Pattern.matches("\\d", age);
    }


}
edytowany 1x, ostatnio: Shalom
szweszwe
Co to ma w ogóle robić?
AI
wpisujesz imię oraz wiek jednej osoby oraz imie oraz wiek drugiej osoby. No i później porównanie kto starszy a kto młodszy i o ile lat.
szweszwe
  • Rejestracja:ponad 11 lat
  • Ostatnio:13 dni
  • Lokalizacja:Kraków
  • Postów:1694
0

Trzeba to zrobić tak iteracyjnie bardziej. Teraz jest wszystko i chyba wszystko jest źle.
Najpierw regexy ogarnij. Twoje imię jest poprawne gdy jest literą a-z albo A-Z a wiek jeśli jest cyfrą. Trochę bez sensu.
Wiesz co znaczy słowo valid? Dlaczego ustawiasz valid na true jak nie jest valid a na false jak jest?

lion137
  • Rejestracja:około 8 lat
  • Ostatnio:około 4 godziny
  • Postów:4935
0

Naucz się pisać posty, albo chociaż formułować problem; skoro to zadanko, to powinno być podane co ma nbyć na wejściu, co na wyjściu i jakie jest pytanie. Zobacz tutaj:
https://stackoverflow.com/help/minimal-reproducible-example


AI
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:39
0

Przecież ja tam mogę dać dowolne słowo albo znak, nie musi być valid… dałem valid ot tak, po prostu.
Hmm, więc jakieś propozycje ?

catom
Jasne. Równie dobrze, możesz zamiast name pisać height, ot tak, żeby od razu było jasne, że chodzi o imię / nazwę. Po prostu, jeśli Twoja funkcja / zmienna / klasa ma adekwatną nazwę do tego, co robi, jest o wiele łatwiej to zrozumieć. Później, analizując kod, jak trafisz na zmienną valid, to musisz pamiętać, że tak naprawdę jest to invalid, tylko nazywa się valid.
C.mind
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
  • Postów:95
0

Dlaczego klasa Person jest statyczna?

AI
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:39
0

hmm, a dlaczego nie ? :)

szweszwe
Jeżeli będziesz wstawiał losowe słówka w losowe miejsca, tak jak to static czy valid, tylko dlatego, że 'a dlaczego nie?' to ciężko ci będzie pomóc z tym kodem.
AI
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:39
0

Dziękuję za odpowiedź.
A co mi to da jeśli to rozbiję i jak mógłbym to rozbić wg. Ciebie?

C.mind
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Warszawa
  • Postów:95
0

Nie rób z tego Maina jakiegoś mutanta, tylko rozbij to na normalną publiczną klasę Person w osobnym pliku. Będzie Ci dużo prościej z tym kodem pracować, bo będzie bardziej czytelny/zrozumiały, już nie mówiąc o tym, że bardziej poprawny. W kontekście tego co chcesz osiągnąć, to ładowanie tutaj statycznej klasy wewnętrznej nie ma sensu.

edytowany 2x, ostatnio: C.mind
AI
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:39
0

Okei,
Zadanie rozwiązałem. Dzięki za pomoc : )
Jeśli ktoś chciałby cały kod to dawajcie na priv.
Pozdro.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.