質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.10%

どのif文にも引っかからなかったとき表示

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 500

YukimasaYajima

score 10

 import java.util.Scanner;
 public class assignment5final1
 {
    public static void main(String [] args){

        String f = "endofinput";
        Scanner input = new Scanner(System.in);
        String pass = input.nextLine();

        System.out.println("password: " + pass);

        int k;

        if(("endofinput").equals(pass)){//BREAK

            }

        if(pass.length() < 8){//8 characters
             System.out.println("Your password must be at least 8 characters.");
        }


        if(pass.contains(" ")){//no spcace
            System.out.println("Your password can only contain aplha numeric characters.");
        }


        for(k = 0; k < pass.length(); k++){//UPPER
                if(Character.isUpperCase(pass.charAt(k))){
                    break;
            }
        }
        if(k == pass.length()){
            System.out.println("Your password must contain at least one uppercase letter.");
        }


        for(k = 0; k < pass.length(); k++){//LOWER
            if(Character.isLowerCase(pass.charAt(k))){
                break;
            }
        }
        if(k == pass.length()){
            System.out.println("Your password must contain at least one lowercase letter.");
        }


        for(k = 0; k < pass.length(); k++){//NUMBER
            if(Character.isDigit(pass.charAt(k))){
                break;
            }
        }
        if(k == pass.length()){
            System.out.println("Your password must contain a numeber.");
        }

        pass.ignoreCase;
        if(pass.contains("password")){//PASSWORD
            System.out.println("Your password cannot contain word 'password.'");
        }




        while(!("endofinput").equals(pass)){
            Scanner r = new Scanner(System.in);
            String password = r.nextLine();

            System.out.println("password: " + password);

            int i;

            if(("endofinput").equals(password)){//BREAK
                break;
            }


            if(password.length() < 8){//8 characters
                System.out.println("Your password must be at least 8 characters.");
            }


            if(password.contains(" ")){//NO SPACE
                    System.out.println("Your password can only contain aplha numeric characters.");
            }


            for(i = 0; i < password.length(); i++){//UPPER
                if(Character.isUpperCase(password.charAt(i))){
                    break;
                }
            }
            if(i == password.length()){
                System.out.println("Your password must contain at least one uppercase letter.");
            }


            for(i = 0; i < password.length(); i++){//LOWER
                if(Character.isLowerCase(password.charAt(i))){
                    break;
                }
            }
            if(i == password.length()){
                System.out.println("Your password must contain at least one lowercase letter.");
            }


            for(i = 0; i < password.length(); i++){//NUMBER
                    if(Character.isDigit(password.charAt(i))){
                        break;
                    }
                }
            if(i == password.length()){
                    System.out.println("Your password must contain a numeber.");
            }

           password.equalsIgnoreCase();
            if(password.contains("password")){//PASSWORD
                    System.out.println("Your password cannot contain word 'password.'");
            }
            }


        }
    }
 }

パスワードチェッカーを作っています。

どのif分に引っかからなかったとき、つまり、入力されたパスワードが有効な場合、
それに対したメッセージ
を表示させたいのですがどこに装入すればいいでしょうか?

それに加え、if分の一つとして、パスワードの一部にpasswordが含まれないようにする為、ignorecaseメソッドを使ってみたのですがエラーが出ます。

この2つの質問に対する解決方法を教えて下さい。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+3

一般的にこんなに main 関数を太らせることはありません。別の関数に分けます。

エラーメッセージを出したいだけなら、String を返す関数などが手軽ですね。正しかった場合は null でも返しておけばそれで分岐できるでしょう。

static String checkPassword(string password) {
    if (チェック1) return "Your password must be at least 8 characters.";
    if (チェック2) return "Your password can only contain aplha numeric characters.";
    return null; // 正しかった場合
}

しかしエラーの種類によって呼び出し側で処理を分けたい場合には、String を比較するのも美しくありません。そのような場合があることを考え、最初から Enum またはメッセージを含むオブジェクトを返す方が設計としては良いと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

引っかかったとき用のフラグを用意して、引っかかったらそのフラグをtrueにしとくようにすれば、最後にそのフラグをチェックすれば引っかかったかどうかを見れますね

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/10/18 01:58

    具体的にどうすればできますかね?

    キャンセル

  • 2019/10/18 06:41

    それが回答に書いてありますよ。
    あとはそのままコードに起こせばいいだけです。
    ※これ以上は作業依頼に応えるだけになるのでこちらにぶら下がります

    キャンセル

  • 2019/10/18 09:41

    boolean flg=false;
    if(条件1){ flg=true; なんやかや}
    if(条件2){ flg=true; なんやかや}
    if(条件3){ flg=true; なんやかや}
    ...
    ...
    if(flg){ ひっかかった!}else{ひっかからなかった!}

    キャンセル

checkベストアンサー

+1

それに加え、if分の一つとして、パスワードの一部にpasswordが含まれないようにする為、ignorecaseメソッドを使ってみたのですがエラーが出ます。

String.equalsIgnoreCase()は比較したい文字列(String)を引数にする必要があります。
質問者様のコード上では、引数に何も設定していない上に
if文の条件にも使用されていないので、現状意味のない行(しかもエラー)になっています。 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る