在 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();
}
}
所以我坚持使用我的代码。我应该使用 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();
}
}