import java.util.Random;
public final class VectorOfInt {
private final int[] _elm;
public VectorOfInt(final int size) {
_elm = new int[size];
}
public final void setElement(final int index, final int value) {
_elm[index] = value;
}
public final int getElement(final int index) {
return _elm[index];
}
public final int innerProduct(final VectorOfInt peer) {
int result = 0;
for (int i = 0; i < _elm.length; i++) {
result += _elm[i] * peer._elm[i];
}
return result;
}
public final int convolution(final VectorOfInt peer) {
int result = 0;
for (int i = 0; i < _elm.length; i++) {
result += _elm[i] * peer._elm[_elm.length - i - 1];
}
return result;
}
public final void add(final VectorOfInt peer) {
for (int i = 0; i < _elm.length; i++) {
_elm[i] += peer._elm[i];
}
}
@Override
public String toString() {
if (_elm.length == 0)
return "()";
StringBuilder sb = new StringBuilder();
sb.append('(').append(_elm[0]);
for (int i = 1; i < _elm.length; i++) {
sb.append(", ").append(_elm[i]);
}
return sb.append(')').toString();
}
public static void main(String[] args) {
VectorOfInt vectorA= new VectorOfInt(5);
VectorOfInt vectorB= new VectorOfInt(5);
VectorOfInt incVector= new VectorOfInt(5);
/* forループを用いて、各ベクトルの各要素に
* setElementを用いて適当な値を設定
*/
Random r = new Random();
for (int i = 0; i < 5; i++) {
vectorA.setElement(i, r.nextInt(10));
vectorB.setElement(i, r.nextInt(10));
incVector.setElement(i, r.nextInt(10));
}
/* printfメソッドにより各ベクトルを表示*/
System.out.printf("ベクトルA=%s ベクトルB=%s ベクトルincVector=%s\n", vectorA, vectorB, incVector);
/* vectorAにincVectorを加算*/
vectorA.add(incVector);
/* vectorAを表示*/
System.out.printf("ベクトルA=%s\n", vectorA);
/* vectorAとvectorBの内積、畳込みを表示*/
System.out.printf("内積=%d 畳込み=%d\n", vectorA.innerProduct(vectorB), vectorA.convolution(vectorB));
}
}