1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Java基礎⑦]文字列の比較 比較演算子とequals メソッドの違い [paiza]スキルチェック見本問題 単純な条件分岐 Java編

Last updated at Posted at 2021-09-13

初めに

今回、以下の問題に挑戦し、Javaでの文字列と文字列の比較について学びました。
普通に比較演算子を使用したところ不正解になってしまいました。
(以下は見本問題のため、問題、解答コードの公開は自由です。)

文字列Sが与えられます。Sがpaizaと一致する場合はYESを、
一致しない場合はNOを出力してください。

誤答 :point_up:文字列の比較演算子に注意!

標準入力をlineで受け取り、==の比較演算子を使い、
"paiza"と一致するかをif文で条件分岐させました。
しかしこれだと不正解です。
(line == "paiza")が成立してくれません。

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        if(line == "paiza"){
            System.out.println("YES");
        }else{
            System.out.println("NO");
        }
    }
}

問題点 比較演算子ではオブジェクトを比較する

問題は(line == "paiza")の箇所です。
配列や文字列を比較する場合、比較演算子を使用すると、
同じオブジェクトを参照してればtrue、違えばfalseが返ってきます。

//同じオブジェクトを参照している場合には、
//比較演算子で比較するとtrueが返って来る
String line1 = "paiza";
String line2 = line1;
if(line1 == line2)  true

今回比較すべきなのは、「値」です。
入力された「値」がpaizaに等しいかどうかです。

使うべきは equalsメソッド

現状、(line == "paiza")としてる箇所は、
if (line.equals("paiza")とすることで、値の比較になります。

正解のコード

import java.util.*;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
        if(line.equals("paiza")){
            System.out.println("YES");
        }else{
            System.out.println("NO");
        }
    }
}

参考にしたサイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?