这是我所拥有的基本课程的一部分。我正在努力防止错误或错误的信息通过。因此,在代码的这一部分中,我将其设置在用户输入其名称的位置,但如果它包含数字或符号,则应该返回错误,直到输入适当的内容为止。但是,这只会有效。我无法弄清楚它何时会或不会起作用的任何模式。我唯一注意到的是,它越长,越有可能通过。
import java.util.Scanner;
public class Challenge1Easy
{
public static void main(String[] args)
{
Scanner reader = new Scanner(System.in);
String name, username;
int age;
boolean good = false;
System.out.print("What's your name? ");
name = reader.nextLine();
String[] name1 = name.split("");
do
{
System.out.print("Sorry, your \"name\" has characters that aren't letters in it. Please enter a real name. ");
name = reader.nextLine();
String[] name2 = name.split("");
for (int i = 0; i < name.length(); i++)
{
if(!Character.isLetter(name.charAt(i)))
{
good = false;
}
else
{
good = true;
}
}
}
while(good != true);
我在这里查看了一些不同的问题并从这些问题/答案中提取了一些信息,并试图在我的程序中实现它,但显然有些东西不起作用。我做错了什么,有时它会抓住它,但有时它不会?输入Man99
之类的内容会导致提示输入新名称。但是,输入khewriuhweiuf8489358934589734985345hiewf
之类的内容不会激活它。
请忽略任何未使用的变量。它们在程序的后期使用,但不会影响我发布的内容。
答案 0 :(得分:0)
试试这个
boolean good = true;
do
{
for (int i = 0; i < name.length(); i++)
{
if(!Character.isLetter(name.charAt(i)))
{
good = false;
break;
}
else
{
continue;
}
}
if (!good) {
System.out.print("Sorry, your \"name\" has characters that aren't letters in it. Please enter a real name. ");
name = reader.nextLine();
}
}
while(good != true);
答案 1 :(得分:0)
请花点时间阅读for-loop
,如果必须,请阅读下载
for (int i = 0; i < name.length(); i++)
{
if(!Character.isLetter(name.charAt(i)))
{
good = false;
}
else
{
good = true;
}
}
假设name
看起来像N1NANA
...
i = 0
,name.charAt(i) = 'N'
,good == true
i = 1
,name.charAt(i) = '1'
,good == false
i = 2
,name.charAt(i) = 'N'
,good == true
......好吧有问题......如果名字中的最后一个字符有效,good
将永远是true
相反,当您点击无效字符时,您应将good
标记设置为false
并停止处理其余文字,例如......
good = true;
for (int i = 0; i < name.length(); i++)
{
if(!Character.isLetter(name.charAt(i)))
{
good = false;
break;
}
}
现在,如果你想做一些非常简单的事情,你可以使用类似......
的东西good = text.matches("[a-zA-Z]");
仅当true
在任何一种情况下都包含name
之间的字符时,才会返回a-z
。显然,这排除了_
之类的内容,但您可以扩展这个想法以满足更多要求......