0

これは私が持っている基本的なプログラムの一部です。エラーや間違った情報が流れないように努めています。コードのこの部分では、ユーザーが名前を入力する場所を設定しましたが、数字や記号が含まれている場合は、適切な何かが入力されるまでエラーを返すはずです。ただし、これは時々しか機能しません。いつ機能するか機能しないかについて、どのようなパターンも把握できません。私が気づいた唯一のことは、それが長ければ長いほど、通り過ぎる可能性が高いということです.

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もアクティブになりません。

未使用の変数は無視してください。それらはプログラムの後半で使用されますが、私が投稿したものには影響しません。

4

2 に答える 2

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);
于 2014-09-04T02:02:24.967 に答える
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 = 0name.charAt(i) = 'N'good == true
  • i = 1name.charAt(i) = '1'good == false
  • i = 2name.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場合にのみ返されます。明らかに、これは のようなものを排除しますが、より多くの要件を満たすためにアイデアを拡張できます...namea-z_

于 2014-09-04T02:02:37.293 に答える