- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基本上,我的程序要求用户输入一个新名称,程序将检查新名称是否符合所有要求。
是的,名称应该添加到数组中并打印在外部文件中。如果不是,它应该要求用户输入一个新名称。
我的问题是,我不知道如何使用 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/
这个问题刚刚出现:如何打破 if 语句?我有一个很长的 if 语句,但有一种情况我可以尽早摆脱它。 在循环中我可以这样做: while (something ) { last if $some
我有一个 iframe,它显示带有可点击链接的 flash 横幅广告。无论如何强制链接在父窗口中打开,而不将 JS 放在打开或更改 flash 文件的页面上? 例如,我可以对 iFrame 做些什么来
JSHint 告诉我不要在 if 语句中使用标签(就 jshint 而言,标签似乎只用于循环)。 forminjection: if (options.addToForm !== false) {
我正在动态地将文本字段(最多 32 个)添加到我的页面中,我需要遍历所有这些文本字段并检查,如果它们全部为空,我将显示一条警告消息!我不想使用 document.getElementsByTagNam
我正在编写一个程序,其中我使用 if 语句来检查某些条件;如果为真,我会增加一个计数器。问题是,一旦语句为真,变量要么无限递增,要么随机递增。 如果条件满足但我一直在尝试使用一些子句来打破这个语句 我
有一个similar question关于 C++ 中的这个问题,但我在这里使用 JavaScript。我基本上和另一篇文章中的 OP 处于相同的情况。 var input = prompt(); w
我一直在研究 Issue 14在 PascalScript 脚本引擎上,使用 Goto 命令跳出 Case block 会产生编译器错误,即使这是完全有效(如果丑陋)的 Object Pascal 代
我正在使用 VBA 的 While...Wend 循环。 Dim count as Integer While True count=count+1 If count = 10 The
我在这个网站上看到过类似的问题,但我无法让它工作。我正在尝试通过 Javascript 检测输入框中的重复条目 - 但我希望在输入重复项时循环中断。我有那部分工作,但循环继续运行,它创建了一个用户无法
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度的了解。包括尝试的解决方案、为什么它们不起作用以及预期结果
这个问题不太可能对任何 future 的访客有帮助;它只与一个较小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,通常不适用于全世界的互联网受众。如需帮助使此问题更广泛适用,visit the
我有一个问题,我可能需要因为某些值(value)而跳出整个 promise 链,或者根据一个值(value)采取两条路径。 你怎么做最好? 这是我想跳出整个链条的第一个场景。我只想给他们留言。
因此,对于类作业,我必须接受用户输入并分配我的沙鼠对象每天可以使用的“食物”量。在这种情况下,我已经从用户那里获取了每天的最大食物量,如果用户尝试输入超过每日最大值的值,我需要向用户提供错误消息。 如
我正在尝试制作一个导航栏,它看起来像这样 https://imgur.com/a/wf7Pe 是有链接的那个,忽略白色的div。 问题是,如果调整页面大小,文本会超出 div,位于其下方。 像这样:
我正在尝试使用 C 退出 while 循环,但使用中断、返回或更改 while 条件不起作用。 基本上,我想知道为什么在最后一个 else if 中,当我声明 back = true 时,我的代码一直
我正在寻找关键字或干净的方式来不使用选择语句退出finally block 。考虑以下示例: private bool AtteptToDoSomething() { try {
我有一个 python 脚本,它将解析 xml 文件中的序列号并将它们写入文本文件。下面代码的问题是,它正在进行无限循环。如果我在记录到文件后的某个位置添加一条break语句,它只会写入一个序列号。如
我在类 LinkRepository 中有一个方法,我正在检查 vector 数组 Datalinks 中的重复条目,它是该类的一个成员。我遍历数组中的所有元素以检查新条目 Datalink* dat
是否可以在每个循环中跳出下划线……? _.each(obj, function(v,i){ if(i > 2){ break // <~ does not work } // so
我想优化依赖于 filter() 的函数。在某些情况下,我想在它们达到特定元素时打破它们。 (例如,我可能有一个包含不同元素的数组。或者,我只想实现一种 findFirst 功能。)在这种情况下,函数
我是一名优秀的程序员,十分优秀!