在 getter 方法后尝试错误检查后卡住

Stuck after trying to false check after getter method

所以我坚持使用我的代码。我应该使用 get 和 set 方法来给一个人一个名字,一个姓氏和出生年份。 这是 class:

import java.util.Scanner;
public class Person {

private int Birthyear;
private String Sname;
private String Name;

public Person() {
}

public Person(String n,String s,int b){
    Name = n;
    Sname = s;
    Birthyear = b;
}
public String getName (){
    return Name;
}
    public String getSname (){
    return Sname;
}
    public int getBirthyear (){
    return Birthyear;
}

这是设置代码,我在其中检查代码是否包含数字的名称以及您的生日是否不正确。这也是我认为问题所在。

    public void setb(int b){

    while(b < 1899 || b >= 2016  ){
        System.out.print("Du existerar inte , försök igen: " );
            b = new Scanner(System.in).nextInt(); //Checks if age is possible.
    }
    }
    public void setn(int n){

    while(Name.matches(".*\d+.*")){
        System.out.print("Felaktigt namn, försök igen: " );
            n = new Scanner(System.in).nextInt(); //Checks to see if there is any numbers in the name.      }
    }
    public void sets(int s){

    while(Sname.matches(".*\d+.*")){
        System.out.print("Felaktigt namn, försök igen: " );
            s = new Scanner(System.in).nextInt(); //Checks so there is no numbers in the surname
    }
}
}

这是我的主。

import java.util.Scanner;
public class PersonUI {

public PersonUI() {
}
public static void main(String[] args) {
    System.out.println("Skriv in ditt förnamn: " );
        String n = new Scanner(System.in).nextLine();
        System.out.print(n); //Your name

    System.out.println(" Skriv in ditt efternamn: " );
        String s = new Scanner(System.in).nextLine();
        System.out.print(n +" "+ s);//your surname

    System.out.println(" Skriv in ditt födelseår: " );
        int b = new Scanner(System.in).nextInt();
        System.out.println(n +" "+ s +" "+ b);//date of birth

            Person p1 = new Person (n,s,b); //Name of person and date of birth

这里是获取方法

    System.out.print(p1.getName());
    System.out.print(" ");
    System.out.print(p1.getSname());
    System.out.print(" ");
    System.out.print(p1.getBirthyear());
    }
}

我相信代码在这里失败了

    public void setb(int b){

    while(b < 1899 || b >= 2016  ){
        System.out.print("Du existerar inte , försök igen: " );
            b = new Scanner(System.in).nextInt(); //Kollar ifall du har en ålder som fungerar.
    }
    }
    public void setn(int n){

    while(Name.matches(".*\d+.*")){
        System.out.print("Felaktigt namn, försök igen: " );
            n = new Scanner(System.in).nextInt(); //Kollar så att det inte finns siffror i namnet.
    }
    }
    public void sets(int s){

    while(Sname.matches(".*\d+.*")){
        System.out.print("Felaktigt namn, försök igen: " );
            s = new Scanner(System.in).nextInt(); //Kollar så att det inte finns siffror i namnet.
    }

或此处

  Person p1 = new Person (n,s,b); //Säger vad personen heter och när dne är född


    System.out.print(p1.getName());
    System.out.print(" ");
    System.out.print(p1.getSname());
    System.out.print(" ");
    System.out.print(p1.getBirthyear());
    }
}
public void setb(int b)

您可以将此方法重命名为

private static boolean checkB(int b)


在构造函数中执行此操作:(您也可以在 setter 方法中执行此操作,使用单独的方法来验证您的数据)

public class Person{
int b;
public person(int b){
    if(checkB(b)){
        this.b = b;
    }
    else{
        //throw exception
    }
    }
private static boolean checkB(int b){
    return (b < 1899 || b >= 2016);
}
public void setB(int b){
    if(checkB(b)){
        b = b;
    }
    else{
        //throw exception
    }
}}

这个怎么样?

public class Person {

    private int Birthyear;
    private String Sname;
    private String Name;

    public Person(String n, String s, int b) {
        if (!isBOk(b) || !isNOk(n) || !isSOk(s)) {
            throw new IllegalArgumentException();
        }

        Name = n;
        Sname = s;
        Birthyear = b;
    }

    public String getName() {
        return Name;
    }

    public String getSname() {
        return Sname;
    }

    public int getBirthyear() {
        return Birthyear;
    }

    private boolean isBOk(int b) {
        return (b >= 1899 || b < 2016);
    }

    private boolean isNOk(String n) {
        return n.matches(".*\d+.*");
    }

    private boolean isSOk(String s) {
        return s.matches(".*\d+.*");
    }
}

所以我稍微修改了你的代码,它应该像这样工作

检查值的方法现在是静态的,并执行 return 布尔值以检查是否匹配正确的输入。

public class Person {

    private int Birthyear;
    private String Sname;
    private String Name;

    public Person() {

    }

    public Person(String n, String s, int b) {
        Name = n;
        Sname = s;
        Birthyear = b;
    }

    public String getName() {
        return Name;
    }

    public String getSname() {
        return Sname;
    }

    public int getBirthyear() {
        return Birthyear;
    }

    public void setName(String name) {
        Name = name;
    }

    public void setSName(String sName) {
        Sname = sName;
    }

    public void setBirthYear(int birthyear) {
        Birthyear = birthyear;
    }

    public static boolean setb(int b) {
        return !(b < 1899 || b >= 2016);
    }

    public static boolean setn(String n) {
        return !n.matches(".*\d+.*");
    }

    public static boolean sets(String s) {
        return !s.matches(".*\d+.*");
    }
}

另一个 class 现在只是简单地使用这些静态方法来循环,只要输入与您的标准不匹配。 此外,您不需要为每个输入创建一个新的 Scanner 对象,只需创建一次。

public class PersonUI {
    public static void main(String[] args) {
        String n, s;
        int b;
        Scanner scanner = new Scanner(System.in);
        do {
            System.out.println("Skriv in ditt förnamn: ");
            n = scanner.nextLine();
            System.out.println(n); // Your name
        } while (!Person.setn(n));
        //
        do {
            System.out.println(" Skriv in ditt efternamn: ");
            s = scanner.nextLine();
            System.out.println(n + " " + s);// your surname
        } while (!Person.sets(s));

        do {
            System.out.println(" Skriv in ditt födelseår: ");
            b = scanner.nextInt();
            System.out.println(n + " " + s + " " + b);// date of birth
        } while (!Person.setb(b));

        Person p1 = new Person(n, s, b); // Name of person and date of birth
        System.out.print(p1.getName());
        System.out.print(" ");
        System.out.print(p1.getSname());
        System.out.print(" ");
        System.out.print(p1.getBirthyear());
        scanner.close();
    }
}