Java - Beginner Level help

0

Hejo,

Mam taki kod ( poniżej wklejony) i problem ponieważ dostałem info zwrotne, że "są pewne miejsca w których mam dostęp do zmiennych obiektu bezpośrednio bez użycia setters i gettrs metod".
Czy ktoś może rzucić okiem ?

package com.company;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    Person person1 = new Person();
    Person person2 = new Person();
    Scanner sc1 = new Scanner(System.in);

    System.out.println("Enter a name: ");
    person1.setName(sc1.next());
    System.out.println("Enter an age");
    person1.setAge(sc1.nextInt());

    System.out.println("Enter a name: ");
    person2.setName(sc1.next());
    System.out.println("Enter an age");
    person2.setAge(sc1.nextInt());

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


}
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;
    }

}

}

1

Używasz person1.name zamiast person1.getName(). Gdyby klasa Person nie była statyczna i nie byłaby wewnątrz klasy Main, to by nie było tego problemu bo byś nie mógł dostać się do prywatnego pola klasy "z zewnątrz".

0

Masz na myśli, że używam tego w funkcji if, tak ?

0

Nie, mam na myśli, że zamiast używać gettera i settera który napisałeś odnosisz się do pola przez zmienną w System.out.println(person1.name + "is older and was born" + (2019-person1.age));. Pewnie o to chodziło osobie która dawał ci feedback.

Jaki masz generalnie problem, nie rozumiesz feedbacku który dostałeś od kogoś czy coś ci nie działa? W pierwszym poście nie zostało żadne pytanie więc nie wiadomo czego oczekujesz.

0
aidfsn napisał(a):

Masz na myśli, że używam tego w funkcji if, tak ?

Przenieś klasę Person do osobnego pliku to zobaczysz co jest nie tak

0

Dzięki za pomoc !
Wszystko zrozumiałem i działa, ale mam pytanie. Chciałbym dodać funkcję, która polega na tym, że jeśli ktoś wpisze liczbę zamiast imienia albo na odwrót to żeby program wyświetlił jakiś napis w stylu " błąd podaj liczbę" albo "błąd podaj cyfrę". Jakieś podpowiedzi ?

Mój kod:
package com.company;
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    Person person1 = new Person();
    Person person2 = new Person();
    Scanner sc1 = new Scanner(System.in);

    System.out.println("Enter a name: ");
    person1.setName(sc1.next());
    System.out.println("Enter an age");
    person1.setAge(sc1.nextInt());

    System.out.println("Enter a name: ");
    person2.setName(sc1.next());
    System.out.println("Enter an age");
    person2.setAge(sc1.nextInt());

    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;
    }

}

}

0

Możesz użyć regexów i stworzyć np. funkcje która będzie sprawdzać czy podany string jest liczbą albo ciągiem znaków https://www.vogella.com/tutorials/JavaRegularExpressions/article.html.

0
CountZero napisał(a):

Możesz użyć regexów i stworzyć np. funkcje która będzie sprawdzać czy podany string jest liczbą albo ciągiem znaków https://www.vogella.com/tutorials/JavaRegularExpressions/article.html.

Do sprawdzenia, czy liczba, to jeszcze można skorzystać z czegoś takiego:

boolean allDigits(String input) {
  return input.codePoints().allMatch(Character::isDigit);
}

Dla innych warunków, Character posiada jeszcze zaimplementowane metody typu isAlphabetic(int codePoint), isLetter(int codePoint), isLetterOrDigit(int codePoint) itd. i można z tym wykorzystać inne metody ze Stream, jak anyMatch(), nonMatch() itp.

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