gpt4 book ai didi

java - 我不知道如何使用 while 循环来确保只有正确的名称才能跳出 while 循环

转载 作者:行者123 更新时间:2023-12-01 21:38:16 24 4
gpt4 key购买 nike

基本上,我的程序要求用户输入一个新名称,程序将检查新名称是否符合所有要求。

是的,名称应该添加到数组中并打印在外部文件中。如果不是,它应该要求用户输入一个新名称。

我的问题是,我不知道如何使用 while 循环来确保只有名称可以跳出循环。

我还在主方法中签署了我的问题

public static void main(String[] args)throws FileNotFoundException {
readFile();
listUserName();
while() { // my question is at here that I don't how to use while loop to make
//sure that only the name which pass all the check..method can
//jump out of the loop
inputNewName();
checkduplicate();
checklength();
checkcase();
checkstart();
checknumber();
checkspecial();
}
addNewName();
listUserName();


}
public static void readFile()throws FileNotFoundException {
//read file and reseve in array
Scanner input = new Scanner(new File("users.txt"));
int i=0;
while(input.hasNext()) {
String info=input.next();
userName[i]=info;
i++;
}
}
public static void listUserName() {//print name
for(int i=0;i<userName.length;i++) {
System.out.println(userName[i]);
}
}
public static void inputNewName() {// prompt uder for a new name
System.out.println("Create a new user:");
Scanner console=new Scanner(System.in);
newname=console.next();
}
public static void addNewName()throws FileNotFoundException {//add new name in array

System.out.println("User: \""+newname+"\" added successfully!");
System.out.println("List of usernames: ");

String[] tempuser=new String[userName.length+1];
for(int i=0;i<(userName.length+1);i++) {
if(i<userName.length) {
tempuser[i]=userName[i];

}else if(i==userName.length) {
tempuser[userName.length] =newname;
}
System.out.println(tempuser[i]);
}
userName=tempuser;
PrintStream out=new PrintStream(new File("users.txt"));
for(int i=0;i<userName.length;i++) {
out.println(userName[i]);
}
}
public static void checkduplicate() { //check duplicate

for(int i=0;i<userName.length;i++) {
if(newname.equals(userName[i])) {
System.out.println("Invalid Name.Name already in use.");
}else {
valid=true;
}
}
}
public static void checklength() {//check length
if(newname.length()>7) {
System.out.println("Invalid Name"+"\n"+"Name too long.");
}
if(newname.length()<4) {
System.out.println("Invalid Name"+"\n"+"Name too short.");
}
}
public static void checkcase() {//check case
boolean upcase=false;
boolean lowcase=false;
for(int i=0;i<newname.length();i++) {

if((0+newname.charAt(i))>=65&&(0+newname.charAt(i)<=90)) {
upcase=true;
}else if((0+newname.charAt(i))>=97&&(0+newname.charAt(i))<=122) {
lowcase=true;
}
}
if(upcase==false||lowcase==false) {
System.out.println("Usernames must have lower-case and upper-case");
}
}
public static void checkstart() {
if(((0+newname.charAt(0))<65&&(0+newname.charAt(0)>99))||
((0+newname.charAt(0))<97&&(0+newname.charAt(0))>122)){

System.out.println("Invalid name. Name must start with a letter");
}
}
public static void checknumber() {
boolean check=false;
for(int i=0;i<newname.length();i++) {
if((0+newname.charAt(i))>=48&&(0+newname.charAt(i))<=57) {
check=true;
}
}
if(check!=true) {
System.out.println("Username must have at least one number");
}
}
public static void checkspecial() {
boolean check=false;
for(int i=0;i<newname.length();i++) {
if((0+newname.charAt(i))==33||(0+newname.charAt(i))==35||(0+newname.charAt(i))==63) {
check=true;
}
}
if(check!=true) {
System.out.println("Username must have at least one special character.");
}
}

}

最佳答案

优雅的解决方案是将您的方法设为 boolean 类型而不是 void 类型。那么,你可以这样做

boolean light;

do{
light = true;
if(!inputNewName()) light=false;
if(!checkduplicate()) light=false;
if(!checklength()) light = false;
if(!checkcase()) light = false;
if(!checkstart()) light = false;
if(!checknumber()) light = false;
if(!checkspecial()) light = false;
}while(light==false);

请注意,我将每个方法放在不同的 if 语句中。这迫使代码到达每个方法。如果您真的不需要在只有一个方法失败时调用每个方法,那么您可以将它们分组在一个 if 语句中,或者实际上,在 while 条件下。

while(!inputNewName() || !checkduplicate() || !checklength() || !checkcase() || !checkstart() || !checknumber() || !checkspecial()) {}

此外,如果您创建 boolean 变量作为类的成员,然后根据需要在每个 void 方法中将其设置为 false,则可以获得相同的结果 - 尽管我必须建议您不要这样做,即使它会从设计的角度来看,这是糟糕的代码。

说了这么多,老实说,我会做的是:

  • 根据概念上的作用来区分这些方法。您可以使用以下方法来输入字符串、检查重复项和检查格式。我将创建一种包含所有格式检查的方法,称为“checkFormat()”。

  • 然后,我将按照我所说的方式创建 boolean 类型的每个方法。

我的时间是:

boolean light;
do
{
light = inputNewName();
if(light) light = checkDuplicate(); //this D should be upper case to follow the camel-case convention.
if(light) light = checkFormat();
} while (!light);

更新:我刚刚意识到您的代码旨在使用我告诉您不要使用的技术。有一个名为“valid”的变量,您可以随时使用。 虽然我真的建议你不要这样做你可以继续:

do{
//all your stuff
} while(!valid);

关于java - 我不知道如何使用 while 循环来确保只有正确的名称才能跳出 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58797059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com