@kuroko0725cc5

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

java 得票数が高い人の情報出したい

Q&A

解決したいこと

今回は人気投票に関してです。
ここから票数が一番高い人の情報をだしたいです。
例えば高い人がPitcherならPitcherのintroduction()メソッドの情報を出したいです。
mainメソッドに書きたいんですけど上手く書けなくて・・・
maxの数値なら出せるんですけど・・・

発生している問題・エラー

出ているエラーメッセージを入力

例)

NameError (uninitialized constant World)

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

package academy.learnprogramming;

public class Main {

    public static void main(String[] args) {
        int sum = 0;
        int max = 0;



        Sportsman[] s = {
                new Pitcher("武田", 1, 15),
                new Batter("山中", 2, 0.324),
                new Batter("安部", 2, 0.310),
                new Pitcher("岩本", 1, 15)
        };

        for (int i = 1; i <= 10; i++) {
            System.out.println(i + "回目");
            for (Sportsman s1 : s) {
                s1.setPoint((int) (Math.random() * 51));
                if (i == 10) {
                    sum += s1.getTotalPoint();
                }
            }
            System.out.println("------------------------------");

        }

        System.out.println("総投票数は、" + sum + "です。");
        System.out.println("優勝者紹介 : ");

    }
}


package academy.learnprogramming;

public class Sportsman {
    private String name;
    private int category;
    private int point;
    private int totalPoint;
    private String[] CATEGORY_NAME;

   public Sportsman(){
       this("",0);
   }

    public Sportsman(String name, int category) {
      this.name = name;
      this.category = category;

      if(this.category == 1){

          System.out.println("//" + this.name + "さんが登録しました。カテゴリーはPitcherです。//");
      }else if(this.category == 2){
          System.out.println("//" + this.name + "さんが登録しました。カテゴリーはBatterです。//");
      }
    }

    public void setPoint(int point) {
        this.totalPoint += point;
        System.out.println(name + " " + totalPoint + "票");
    }

    public int getTotalPoint() {
        return totalPoint;
    }

    public void introduction(){
        System.out.print(this.name);
    }
}



package academy.learnprogramming;

public class Pitcher extends Sportsman{

    private int win;

    public  Pitcher(String name,int category,int win){
        super(name,category);
        this.win = win;
    }

    @Override
    public void introduction() {
        super.introduction();
        System.out.printf("%10s", "(Pitcher) 勝ち数 : " + this.win + "勝");
    }
}





package academy.learnprogramming;

public class Batter extends Sportsman{


        private double avg;

        public  Batter(String name,int category,double avg){
            super(name,category);
            this.avg = avg * 1000;

        }

        @Override
        public void introduction() {
            super.introduction();
            String number = String.valueOf(this.avg);
            char[] digits1 = number.toCharArray();
            System.out.printf("%10s", "(Batter) 打率 : " + digits1[0] + "割" + digits1[1] + "分" + digits1[2] + "厘");
        }
    }



例)

//山中さんが登録しました。カテゴリーはBatterです。//
//安部さんが登録しました。カテゴリーはBatterです。//
//岩本さんが登録しました。カテゴリーはPitcherです。//
1回目
武田 36票
山中 40票
安部 9票
岩本 45票
------------------------------
2回目
武田 48票
山中 60票
安部 16票
岩本 47票
------------------------------
3回目
武田 85票
山中 64票
安部 33票
岩本 96票
------------------------------
4回目
武田 95票
山中 95票
安部 83票
岩本 146票
------------------------------
5回目
武田 109票
山中 112票
安部 124票
岩本 186票
------------------------------
6回目
武田 118票
山中 124票
安部 134票
岩本 189票
------------------------------
7回目
武田 154票
山中 167票
安部 149票
岩本 232票
------------------------------
8回目
武田 200票
山中 198票
安部 161票
岩本 243票
------------------------------
9回目
武田 208票
山中 223票
安部 205票
岩本 274票
------------------------------
10回目
武田 224票
山中 238票
安部 213票
岩本 303票
------------------------------
総投票数は、978です。
優勝者紹介 : 

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

0 likes

2Answer

優勝者を取得するには、10回目以降の投票数から算出すればいいので、票集計しているfor文の後に

Sportsman winner = null;
int now, old = 0;
for (Sportsman s1 : s) {
	now = s1.getTotalPoint();
	if(now > old) {
		winner = s1;
	}
	old = now;
}
winner.introduction();

で1人の優勝者が取れます。

また、複数の優勝者を考慮する場合はListとラッパークラスを用いることで実装できます。

1Like

Comments

  1. @kuroko0725cc5

    Questioner

    そう言ったやり方もあったんですね。すごく勉強になりました。教えていただきありがとうございます。
    これを機にもっと成長します。

StreamAPIで下記のように実装するのはどうでしょうか?
(ちゃんと動作確認してないのでこのまま動くかわかりませんが)

var winner = Arrays.stream(s).max((s1,s2)-> s1.totalPoint.compareTo(s2.totalPoint)).get();
winner.introduction();
0Like

Comments

  1. @kuroko0725cc5

    Questioner

    ありがとうございます。とても参考になりました。
    これを機にもっとできるように日々努力します。

Your answer might help someone💌