67545


以下のプログラムで、breakが機能しません。  
プログラムの意図としては、「もし0を入力したら、for文を抜ける」というものです。正常に記述しましたが、0を入れても、for文が回ります。どうしてでしょうか？

[code]

    //package j2.lesson01;
    import java.util.*;
    public class AverageClass {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            // 国語の点数記録を作る
            // (CourseRecord型のデータを一つ作り、そのIDをcr0に格納する)
            CourseRecord cr0 = new CourseRecord();
            cr0.subject = "国語";
            cr0.score = 55;
    
            // 数学の点数記録を作る
            CourseRecord cr1 = new CourseRecord();
             cr1.subject = "数学";
             cr1.score = 95;
    
            // 英語の点数記録を作る
            CourseRecord cr2 = new CourseRecord();
              cr2.subject = "英語";
              cr2.score = 78;
    
            // 平均点
            double average = (cr0.score + cr1.score + cr2.score) / 3.0;
    
            // それぞれの科目について表示する
            System.out.println(cr0.subject + "の得点は" + cr0.score + "点");
            System.out.println(cr1.subject + "の得点は" + cr1.score + "点");
            System.out.println(cr2.subject + "の得点は" + cr2.score + "点");
    
            // 平均点を表示
            System.out.println("平均点は" + average + "点");
    
            Idai a = new Idai("あいう",18);
            a.print();
            Idai b = new Idai("かきく");
            b.print();
            for (int i=0;i<20;++i){
            System.out.print("文字を入れてください>");
            String c = sc.nextLine();
            if(c=="0"){
                //int a = Integer.parseInt(c);
                break;}
            Idai d = new Idai(c);
            d.print3(); 
            }
        }
    
        static class CourseRecord {
    
            // 科目名
            String subject;
    
            // 点数
            int score;
    
        }
    
       static class Idai{
    
        String str;
        int x;
        Idai(String str,int x){this.str=str;this.x=x;}
        Idai(String str){this.str=str;}
    
        public void print(){System.out.println(str+x);}
        //public void print2(){System.out.println(str);}
        public void print3(){System.out.println("任意の入力文字は"+str);}
    
       }
    
    }
    
[/code]

実行結果は以下の通りです。

[code]

    国語の得点は55点
    数学の得点は95点
    英語の得点は78点
    平均点は76.0点
    あいう18
    かきく0
    文字を入れてください>0
    任意の入力文字は0
    文字を入れてください>０
    任意の入力文字は０
    文字を入れてください>0
    任意の入力文字は0
    文字を入れてください>0
    任意の入力文字は0
    文字を入れてください>0
    任意の入力文字は0
    文字を入れてください>
    
[/code]


CC BY-SA 4.0
2020-06-10T13:49:08.970
67507
2020-06-11T11:35:32.557
2020-06-10T14:25:49.180
23994
39688
question
java
for文の中でbreakが機能しません。どうしてでしょうか？


breakが機能しない、のではなく、breakが実行されてないんじゃないでしょうか。

> if(c=="0"){

これは成立しません


CC BY-SA 4.0
2020-06-11T01:22:49.350
67522
2020-06-11T01:22:49.350
27481
67507
answer


Java で文字列の比較をするには `String` クラスの `equals()` メソッドを使う必要があります。つまり、

[code]

    c=="0"
    
[/code]

の代わりに

[code]

    c.equals("0")
    
[/code]

と書く必要があります。

`==` を使う比較はオブジェクト同士のポインタ比較になりますので、文字列の中身が一緒であっても違うオブジェクトであれば `false`
が返ってきてしまいます。


CC BY-SA 4.0
2020-06-11T11:35:32.557
67545
2020-06-11T11:35:32.557
40595
67507
answer