JAVA Day-9

8442 ワード

2 Dアレイ


これまでは1 Dアレイを使用していました.
2 D配列を学び、それをどのように利用するかを学びます.

2 Dアレイとは


正方配列とは、横と列の個数が等しいことを意味します.
非キューブ配列とは、横、列の個数が異なることを意味します.
配列は配列に存在する
RAMでの表示

わかりやすい様子

方法:arrData[0]で+0配列にアクセス
arrData[0][2]の場合、アクセス3の値
arrDataであれば[2][1]、アクセス8の値
2 D配列は、値にアクセスするために配列に2回アクセスする必要があります.
一度に近似して配列を修正すること自体も可能です
ex) int arrData[0] = arData;

2 Dアレイの宣言


メソッドを宣言します.
자료형 [][] 배열명 = new 자료형[행][열];

자료형 [][] 배열명 = {
	{값1, 값2...},
	{값1, 값2...}
	};
3 D配列とは
3面4行5列
4次元配列とは?
2の3面4行5列

ショップマネージャの作成


に質問ナイキ売り場の各支店、各年齢層の売上を求め、支店、各年齢層の総売上、平均売上、総売り場の総売上、平均売上を示すコードを書き出します。


支店は3店舗(江南、瑞草、松坡)あり、年齢は全年齢、子供売り場に分かれている.
view側はオプションを使用してコミュニケーションします.

考えてみろ。


この売り場は全部で3つ、年齢別の2つで、全部で6つ並んでいます.ここではすべての年齢と子供の区別があいまいなので、私はすべての年齢を大人にします.
成人江南(カンナム)、瑞草(ソチョ)、松坡(ソンパ)、子供江南(カンナム)、瑞草(ソチョ)、松坡(ソンパ)を1つの階層に分けて販売し、1つの階層に年齢を含めて2つの階層に売場を並べばいい.
視覚的には
アレイの様子
江南A[0][0]、瑞草A[0][1]、松坡A[0][2]
江南K[1][0]、瑞草K[1][1]、宋派K[1][2]

作成

  • 私たちはまだ使用方法がないので、直接メインメソッドに書きましょう.
    メインメソッドで2 D配列を作成します.
    2 D配列は想像通りでいいです.
    ここで整数を用いる理由は売上高が整数で表されるためである.
  • int [][] arrIncome = new int [2][3];

  • 次に売上高をそれぞれ入力しますshowinputを使用し、[i][j]2次元配列にすべての値を含めるので、まずfor文iを繰り返し、for文にj繰り返し文を作成し、次に繰り返し実行します.
    また、繰り返し文では、繰り返し回数が複数回使用される可能性があるので、変数として格納します.
    arIncomeの値は文字列なのでエラーが発生しました.それを整数型に変換して入れましょう.また,すべての売上高が入力されると加算されるのでsumを作成して積算関数として格納する.
  • int rLength = arrIncome.length;
    int cLength = arrIncome[0].length;
    
    for (int i = 0; i < rLength; i++) {
    	for (int j = 0; j <cLength; j++) {
    		arrIncome[i][j] = Integer.parseInt(JOptionPane.showInputDialog(arrName[i][j]+menuMsg));
    		sum += arrIncome[i][j];
    			}
    		}
  • 現在sumで総売上高を求めていますが、総売上高の平均値を求めてみましょう.
    cLengthとrLengthにいくら乗じて、総売上高の平均値を求めることができます.また、実数型で素数ポイントを作成し、2番目の桁数に変換してから実数型に変換します.
  • avg = Double.parseDouble(String.format("%.2f", (double)sum/(rLength*cLength)));
    

  • また、各年齢層の売上高と各支店の総売上高も求めています.
    各年齢層の売上高を求めるために、まず各年齢層の売上高ランキングを作成する.
    年齢別に江南から松坡売場までは、1列目の和、2列目の和を1つずつ入れればいいのですが、列の長さは2を1次元に並べばいいのです.
    また,配列に値を含めるためには,iを繰り返すだけでよい.
    配列名:arasum
    売り場別には江南の大人、子供の和/瑞草の大人、子供の和/松坡の大人、子供の和、長さは3人で1次元に並べばいいので、それを含めてjを繰り返すといいでしょう.
    配列名:arbsum
  • int [] arAsum = new int[2];
    int [] arBsum = new int[3];
    
    for (int i = 0; i < rLength; i++) {
    	result += "-------------------------\n";
    	for (int j = 0; j <cLength; j++) {
    		arrIncome[i][j] = Integer.parseInt(JOptionPane.showInputDialog(arrName[i][j]+menuMsg));
    		sum += arrIncome[i][j];
    		arAsum[i] += arrIncome[i][j];
    		arBsum[j] += arrIncome[i][j];
    		}
    	}
  • 売場の総売上高は年齢別、各売場の総売上高と総売上高の平均数で求められていますが、今から各年齢層の平均売上高と各売場の平均売上高を求めましょう.
    各年齢層の売上高は、児童と成人の売上高から求め、成人は3、児童は3に分けて、児童と成人の平均売上高をそれぞれ求めることができる.
    従って、総売上高ごとに長さ3のarbcsumが得られる.lengthを用いて分割し,小数点2桁で表すとうっかり変換して値を含む.また、この値の長さは2なので、平均1次元配列を個別に作成します.
    配列名:aAvg、繰り返し長さ2
  • double [] aAvg = new double[2];
    
    for (int i = 0; i < rLength; i++) {
    	aAvg[i] = Double.parseDouble(String.format("%.2f", (double)arAsum[i]/arBsum.length));
    		}
  • 以下は各売り場の平均売上高です
    各売り場の売上高は、江南(カンナム)、瑞草(ソチョ)、松坡(ソンパ)をベースに江南(カンナム)で2、瑞草(ソチョ)で2、松坡(ソンパ)で2に分けてこそ、各売り場の平均売上高を求めることができる.そのため、各売り場の売上高のうち長さが2のARASUMです.lengthを用いて平均売上高を求め,上のように1次元配列を装着して値を格納する.
    配列名:bAvg、繰返し長さ3
  • double [] bAvg = new double[3];
    
    for (int i = 0; i < cLength; i++) {
    	bAvg[i] = Double.parseDouble(String.format("%.2f", (double)arBsum[i]/arAsum.length));
    		}
  • 今から結果を表示しましょう.結果を生成するときに情報だけで表示すると、長いコードが現れ、部分的に重複する部分が現れます.
    これまでに作成したfor反復文を最大限に利用してresultに蓄積することで,コード量を減らし,効率を向上させることができる.
    まずresultの変数を初期化し、売場名が重複するので、売場名も順番にリストします.配列名は2 D配列で表すこともできます.
    成人は江南A、児童は江南K
    また、結果が多いので、少し線を足しましょう.
  • String [][] arrName = {{"강남K", "서초K", "송파K"},{"강남A","서초A","송파A"}};
    
    for (int i = 0; i < rLength; i++) {
    	result += "-------------------------\n";
    	for (int j = 0; j <cLength; j++) {
    		arrIncome[i][j] = Integer.parseInt(JOptionPane.showInputDialog(arrName[i][j]+menuMsg));
    		sum += arrIncome[i][j];
    		arAsum[i] += arrIncome[i][j];
    		arBsum[j] += arrIncome[i][j];
    		result += arrName[i][j] + " 매출액" + arrIncome[i][j]+"백만원\n";
    		}
    	}
  • 各年齢層の売上高にも結果が表示され、結果は最初のfor文の繰り返しに総売上高が含まれていますが、個別に名前を付けるために各年齢層の売上高のfor文で使用されています.また、売上高の長さも2を繰り返し、平均売上高と併用しても構わない.
    ここでは年齢別売上高の名称も発表した.子供の売り場を表示するために、大人の売り場です.
  • String [] aName = {"키즈점", "성인점"};
    
    	for (int i = 0; i < rLength; i++) {
    		aAvg[i] = Double.parseDouble(String.format("%.2f", (double)arAsum[i]/arBsum.length));
    		result += aName[i]+" 총 매출액 " + arAsum[i] + "백만원\n";
    		result += aName[i] + " 평균 매출액 " +  aAvg[i] + "백만원\n";
    		result += "-------------------------\n";
    		}
  • 以下は各売場売上の表示です.同様に、各売り場の名称を明記するため、レイアウトを改めて発表した.現在の区分は江南K、江南Aのように、各地点の表記には適していない.アレイの宣言は1次元アレイで、長さは3で、6番のようです.
  • String [] bName = {"강남점", "서초점", "송파점"};
       
       for (int i = 0; i < cLength; i++) {
    	bAvg[i] = Double.parseDouble(String.format("%.2f", (double)arBsum[i]/arAsum.length));
    	result += bName[i]+" 총 매출액 " + arBsum[i] + "백만원\n";
    	result += bName[i] + " 평균 매출액 " +  bAvg[i] + "백만원\n";
    	result += "-------------------------\n";
    	}
  • 総売上高と総売上高の平均値を加算し、
  • を拡大します.
     result += "총 매출액 " + sum + "백만원\n" + "평균 매출액 " + avg + "백만원\n";
     JOptionPane.showMessageDialog(null, result);
    これまでに作成されたコード
  • です.
  • package myTest;
    
    import javax.swing.JOptionPane;
    
    //나이키 매장의 지점별, 연령별 각 매출액을 구하고 지점, 연령별 총 매출액, 평균 매출액, 총 매장의 매출액, 평균 매출액을 구하시오 
    
    public class ArrShop {
    	public static void main(String[] args) {
    		int [][] arrIncome = new int [2][3];
    		int rLength = arrIncome.length;
    		int cLength = arrIncome[0].length;
    		int sum = 0;
    		String menuMsg = "매출을 입력하세요";
    		String [][] arrName = {{"강남K", "서초K", "송파K"},{"강남A","서초A","송파A"}};
    		String [] aName = {"키즈점", "성인점"};
    		String [] bName = {"강남점", "서초점", "송파점"};
    		int [] arAsum = new int[2];
    		int [] arBsum = new int[3];
    		double [] aAvg = new double[2];
    		double [] bAvg = new double[3];
    		double avg = 0.0;
    		String result = "";
    		
    		for (int i = 0; i < rLength; i++) {
    			result += "-------------------------\n";
    			for (int j = 0; j <cLength; j++) {
    				arrIncome[i][j] = Integer.parseInt(JOptionPane.showInputDialog(arrName[i][j]+menuMsg));
    				sum += arrIncome[i][j];
    				arAsum[i] += arrIncome[i][j];
    				arBsum[j] += arrIncome[i][j];
    				result += arrName[i][j] + " 매출액" + arrIncome[i][j]+"백만원\n";
    			}
    		}
    		result += "-------------------------\n";
    		avg = Double.parseDouble(String.format("%.2f", (double)sum/(rLength*cLength)));
    		
    		//연령별 평균 매출액
    		for (int i = 0; i < rLength; i++) {
    			aAvg[i] = Double.parseDouble(String.format("%.2f", (double)arAsum[i]/arBsum.length));
    			result += aName[i]+" 총 매출액 " + arAsum[i] + "백만원\n";
    			result += aName[i] + " 평균 매출액 " +  aAvg[i] + "백만원\n";
    			result += "-------------------------\n";
    		}
    		
    		//지점별 평균 매출액
    		for (int i = 0; i < cLength; i++) {
    			bAvg[i] = Double.parseDouble(String.format("%.2f", (double)arBsum[i]/arAsum.length));
    			result += bName[i]+" 총 매출액 " + arBsum[i] + "백만원\n";
    			result += bName[i] + " 평균 매출액 " +  bAvg[i] + "백만원\n";
    			result += "-------------------------\n";
    		}
    		
    		result += "총 매출액 " + sum + "백만원\n" + "평균 매출액 " + avg + "백만원\n";
    				
    		JOptionPane.showMessageDialog(null, result);
    
    		
    	}
    }