所以我坚持使用我的代码。我应该使用get和set方法给一个人一个姓名,姓和出生年份。 这是班级:
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;
}
这是设置代码,我检查代码中的内容,例如包含数字的名称以及您的birtyear是否不正确。这也是我认为问题所在。
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
这是get方法
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());
}
}
答案 0 :(得分:1)
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
}
}}
答案 1 :(得分:1)
这个怎么样?
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+.*");
}
}
答案 2 :(得分:1)
所以我稍微更改了你的代码,它应该像这样工作
检查值的方法现在是静态的,并返回一个布尔值来检查它是否与正确的输入匹配。
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+.*");
}
}
只要输入与您的critera不匹配,另一个类就会立即使用这些静态方法进行循环。 此外,您不需要为每个输入创建一个新的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();
}
}