paiza レベルアップ問題集>Cランクレベルアップメニュー>Java編>forループ

解答を見ながら写して答えましたが、誤解して考えていたので、その思考プロセスも含めて覚え書きに

import java.util.*;


public class Main {
    public static void main(String[] args) {
        // 自分の得意な言語で
        // Let's チャレンジ!!
        
        /*
        忘年会の参加者の人数 N と、数 M , K が与えられ
        、各参加者が書いた紙が与えられるので、それぞれの参加者の得点を計算して出力してください。
        */
        
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        int m = sc.nextInt();
        int k = sc.nextInt();
        
        //System.out.println(k);
        
        
        
        for(int i=0; i<num; i++){
            int[] hoges = new int[m];
            
            for(int j=0; j<m; j++){
                hoges[j] = sc.nextInt();
            }
            
            //System.out.println(Arrays.toString(hoges));//このhogesはforのなかしか生きてない
            
            int answer = 0;//reset
            
            for(int j=0; j<m; j++){
                if(hoges[j]==k){
                    answer++;
                }
            }
            
            System.out.println(answer);//このanswerはforのなかしか生きてない
            
        
        }

    }
}

配列hogesの中身

[2, 2]
[1, 2]
[1, 1]

よく分からないのは、iに相当する一段目の配列は
int[] hoges = new int[m];
で宣言していると思うんですが、

2段目の配列が
hoges[j] = sc.nextInt();

だけでiに相当する記述がないんですよね? 1段目のiはどこにいった。

でも中身を見るとちゃんと2階建てになっている。

kue
?

それとも、hogesはm段の配列ですよと宣言しておいて、
hoges[j] = sc.nextInt();
は、jが0からmになり、その一段ごとに中身が連続して追加になっているのかな? この一行で?

あぶらぼうず
当惑のあぶらぼうず

ああ、これ分かった気がします。多次元配列じゃないんですね。
単純に配列hoges(1段の)を、3つ生成している。

[2, 2]//最初に生成され出力されたhoges
[1, 2]//次に生成され出力されたhoges
[1, 1]//3つめに生成され出力されたhoges

hogesがforの中で宣言され、「forのなかでしか生きていない」なら、これで合っているはずです。System.out.printlnの位置からいってもそのはずだ。

つまりこの解答例は多次元配列じゃなく、単純に1段の配列ということになりますね。なるほど・・・

https://paiza.jp/works/mondai/c_rank_level_up_problems/c_rank_for_boss

paiza Cランクレベルアップメニュー
0

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です