2次元アレイ内のすべての要素を分割

エムレKIRATLI:

私は、xとy座標の合計を持っていると私は平均値を計算する必要があります

float [][] sums = new float[n][2];

例えば、私の配列で構成されています。


{ [ 8,6 ],
  [ 4,2 ] }

2に分割した後:


{ [ 4,3 ],
  [ 2,1 ] }

私はループでこれを行うことができますが、1つの機能でそれを行うことが可能となるのだろうか。

ジョージProfenza:

あなたは、単に関数にループのためにあなたをカプセル化し、それを呼び出すことができます。

import java.util.Arrays;

void setup(){

    float [][] sums = new float[][]{ { 8,6 },
                                     { 4,2 } };

    print("pre: ");
    System.out.println(Arrays.deepToString(sums));

    matMul(sums,0.5);

    print("post:");
    System.out.println(Arrays.deepToString(sums));
}

void matMul(float[][] data,float multiplier){
  for(int y = 0; y < data.length; y++){
    for(int x = 0; x < data[y].length; x++){
      data[x][y] *= multiplier;
    }
  }
}

あなただけの機能を使い始めるしている場合、ここでいくつかのポインタです。

関数が行うことができます最も簡単な方法は、命令のカプセル化束である、ないは機能外部から任意のデータを読み込み、任意のデータを返さないことを可能にします。

ここでは非常に単純な/退屈な例は次のとおりです。

void sayHello(){
  println("hello");
}

ポイントは、それが構文に慣れることです。機能があります:

  • (戻り)タイプ:関数が結果を返す場合、結果のどのようなことでしょうか?(番号、テキスト、オブジェクト、などの文字列が)、それは単純になりませんvoid
  • 名前(ので、我々はそれを呼び出すことができます)
  • 括弧内の引数(0以上)、各(ローカル変数に類似)のタイプと名前を有します
  • でdelinieated体{および}記号:このブロック内で定義され、このすべてが(どちらかといえば、返された何を除いて)このブロックにのみ表示されます。これは、関数のスコープとして知られています

あなたはおそらくすでに結果を返さない関数を定義しました:void setup(){}void draw(){}

あなたはprobavlyすでに前に関数を呼び出しました:(例えばparanthesisに(もしあれば)の名前と引数を使用しprintln("hi");point(50,50);noCursor();、など)

入力の合計:ここでは2つの入力を受け取り、1つの出力を返す関数の簡単な例です:

int sum(int a, int b){
  return a+b;
}

代わりに、void我々の結果を返すintタイプと引数aとbという名前の整数のカップルです。唯一の他の余計な事はあるreturn(あなたがそれを推測)結果を返す(機能ブロックを終了)するために使用するキーワード。

関数を呼び出すここでは基本的な例:

void setup(){
  println(add(2,2));
  println(add(4,4));
}

int add(int a, int b){
  return a + b;
}

あなたがもっと読みたい場合は、チェックアウトケビン・ワークマンの作成機能の処理チュートリアル

裸の心にボイド方法は、関数への引数として渡す配列参照を変換します。あなたが入力されたデータを変更したい、まだ結果を返さない状況があるかもしれません。そのような場合などには、あなたはどちらか、事前に配列をコピーし、コピーを渡し、またはあなたのためのコピーを作成する機能のバージョンを持つことができます。

import java.util.Arrays;

void setup(){

    float [][] sums = new float[][]{ { 8,6 },
                                     { 4,2 } };

    print("sums:    ");
    System.out.println(Arrays.deepToString(sums));

    float[][] result = matMul(sums,0.5);

    print("result:  ");
    System.out.println(Arrays.deepToString(result));

    print("original:");
    System.out.println(Arrays.deepToString(sums));
}

float[][] matMul(float[][] data,float multiplier){
  // check input data
  if(data == null || data.length == 0){
    println("no data to multiply, returning null");
    return null;
  }
  // make another array of the same shape
  float[][] result = new float[data.length][data[0].length];
  // do the multiplcation, storing the result into the duplicate array
  for(int y = 0; y < data.length; y++){
    for(int x = 0; x < data[y].length; x++){
      result[x][y] = data[x][y] * multiplier;
    }
  }
  // return the result
  return result;
}

機能の開始時にお知らせいくつかのチェック:一般的にはそれだけの場合には、入ってくるvalidataデータに良いアイデアだし、どのようなエラーを考え出すくらいに費やしwithouth(問題を解決するために簡単にそれを行いますメッセージを表示手段)。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=9011&siteId=1