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

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

ただいまの
回答率

88.77%

Java入力チェック

解決済

回答 1

投稿

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

funahuna

score 16

import java.io.IOException;
import java.io.InputStreamReader;

/** 調査 */
public class test1 {

    /**
     * @param args プログラム引数
     * @throws IOException 入出力例外
     */
    public static void main(String[] args) throws IOException {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {

            // 標準入力から受けとった値を変数line1に代入
            String line1 = br.readLine();

            int n = Integer.parseInt(line1);

            //入力する為の箱を用意する(配列の要素数はn)
            String[] arr = new String[n + 1];

            arr[0] = String.valueOf(n);

            for (int i = 1; i <= n; i++) {
                arr[i] = br.readLine();
            }

            //            System.out.println(arr[n]);

            System.out.println(answer1(arr));

        }

    }

    /**
     * IPアドレスの書式通りになっているかのチェック<br>
     *
     *
     * @param arr    標準入力で受け取った値
     * @return      .区切りで分割した値の要素数が4個かつ0文字以上255以下の時に
     *               Trueを返す、
     *               それ以外の時ははFalseを返す。
     */
    static String answer1(String[] arr) {

        // 結果の文字列
        String result = "";

        // 入力される行数
        int n = Integer.parseInt(arr[0]); // TODO 取得してください

        // 入力される行数分繰り返し
        for (int i = 1; i <= n; i++) {

            // 入力された、文字列を取得
            String str = arr[i];

            // "."で分割
            String[] x = str.split("\\.");

            // 結果
            int f = 0;// 0:True/255:False

            // 要素数が 4 の場合
            if (x.length == 4) {

                // 要素数分繰り返し
                for (int j = 0; j < x.length; j++) {

                    // 配列 x の i番目の要素を取得
                    String xx = x[j];
                    int y = Integer.parseInt(xx);

                    // i番目の要素が0以上255以下かを確認
                    //                    if (y >= 0 && y <= 255) {
                    //
                    //                    }
                    // 0以上255以下じゃなかったら
                    // 結果を1:Falseに上書く
                    if (y >= 0 != y <= 255) {
                        f = 1;
                        System.out.println("False");
                    }

                // 0以上255以下じゃなかったら
                if (y >= 0 && y <= 255) {
                    System.out.println("True");
                }
            }
//                result += "False";

            }
            // 要素数が 4 じゃなかったら
            // 結果を1:Falseに上書く

            if (x.length == 4) {
                f = 1;
                System.out.println("False");

            // 結果の文字列に追記
        }

        // 結果を返却
    }
        return "aa";
}


メインメソッドから配列で受け取り別メソッドで処理をしようと思ったのですが、なかなかうまくいきません。

やりたいこと
IPアドレス書式で書き書式どおりだったらTrue 書式ではなかったらfalseを返したいのです。

入力例
1.1.1.1
1.1.2.1
3.3.3.3
4.4.4.300

出力例
True
True
True
false
このようにしたいです。

入力の方はデバッグをして値が来ていることを確認しました。

問題なのは
0以上255以下じゃなかったらfに1を足す
出力をTrue Falseここだと思います・・・。
このロジックのヒントをいただけますか・・・

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

0

見るからにここがおかしいです。

// 0以上255以下じゃなかったら
// 結果を1:Falseに上書く
if (y >= 0 != y <= 255) {

『0以上かつ255以下、ではない』を記述するなら !(0 <= y && y <= 255) です。
あるいは単に y < 0 || 255 < y でも良いでしょう。


また、isValidIPAddress みたいなメソッドを切り出した方が扱いやすいと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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