質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

516閲覧

[java]配列Aを配列Bにコピーしたい

mm0634

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

1クリップ

投稿2019/12/09 07:09

編集2019/12/09 07:10

DTWを使用し、加速度センサから取得した数値を比較するプログラムを組んでいます。
配列を使っているのですが、例えば、配列Aを配列Bにコピー、もしくは定義をしたいのですが、うまく出来ません。
どなたかご教示をお願いいたします。

java

1 2package jp.kait.ic.tilab.posture; 3 4import java.io.BufferedReader; 5import java.io.FileReader; 6import java.io.IOException; 7import java.util.ArrayList; 8import java.util.List; 9import java.util.StringTokenizer; 10 11public class PostureDetect { 12 public static final double dtwThresh = 0.7; // 閾値 13 public static final double bigNumber = 100000.0; 14 15 public static void main(String[] args) { 16 // ファイル名 17 String postureDat = "files/dat2Shag.csv"; // 判定対象データ 18 19 // 変数 20 List<Double> x = new ArrayList<Double>(); // ストリーム波形用 21 List<Double> y = new ArrayList<Double>(); // 姿勢波形用 22 List<Double> x2 = new ArrayList<Double>(); // ストリーム波形用 23 List<Double> y2 = new ArrayList<Double>(); // 姿勢波形用 24 List<Double> x3 = new ArrayList<Double>(); // ストリーム波形用 25 List<Double> y3 = new ArrayList<Double>(); // 姿勢波形用 26 //平方根計算用のList 27 28 29 // データ読み込み 30 try{ 31 // ファイルの読みこみ 32 FileReader fr = new FileReader(postureDat); 33 BufferedReader br = new BufferedReader(fr); 34 35 // 行ごと処理 36 String line; 37 StringTokenizer token; 38 39 // ストリーム波形読み込み 40 line = br.readLine(); 41 token = new StringTokenizer(line,","); 42 while(token.hasMoreTokens()){ 43 x.add(Double.parseDouble(token.nextToken())); 44 } 45 46 line = br.readLine(); 47 48 token = new StringTokenizer(line,","); 49 while(token.hasMoreTokens()){ 50 y.add(Double.parseDouble(token.nextToken())); 51 } 52 line = br.readLine(); 53 54 token = new StringTokenizer(line,","); 55 while(token.hasMoreTokens()){ 56 x2.add(Double.parseDouble(token.nextToken())); 57 58 } 59 60 // 姿勢波形読み込み 61 line = br.readLine(); 62 token = new StringTokenizer(line,","); 63 while(token.hasMoreTokens()){ 64 y2.add(Double.parseDouble(token.nextToken())); 65 } 66 67 line = br.readLine(); 68 token = new StringTokenizer(line,","); 69 while(token.hasMoreTokens()){ 70 x3.add(Double.parseDouble(token.nextToken())); 71 72 } 73 74 line = br.readLine(); 75 token = new StringTokenizer(line,","); 76 while(token.hasMoreTokens()){ 77 y3.add(Double.parseDouble(token.nextToken())); 78 } 79 80 //System.out.println(x+"\n"+x2+"\n"+x3+"\n"+y+"\n"+y2+"\n"+y3+"\n"); 81 br.close(); 82 }catch (IOException ex){ 83 ex.printStackTrace(); 84 } 85 86 // 姿勢判定 87 // 変数初期化 88 double d_min=bigNumber; // 最小値 89 int t_start = 0; // 開始点 90 int t_end = 0; // 終了点 91 String tmpStr=""; // デバッグ用 92 93 int lenX=x.size(); // ストリーム波形のサイズ 論文中t 94 int lenY=y.size(); // 姿勢波形のサイズ 論文中m 95 96 97 double[] d = new double[lenY+1]; 98 double[] d_dash = new double[lenY+1]; 99 100 101 int[] s = new int[lenY+1]; 102 int[] s_dash = new int[lenY+1]; 103 104 105 for(int i=1;i<lenY+1;i++)d[i] = bigNumber; 106 for(int i=1;i<lenY+1;i++)d_dash[i] = bigNumber; 107 108 d[0] = 0.0; 109 d_dash[0] = 0.0; 110 111 // 論文の添え字にあわせるため0追加 112 x.add(0, 0.0); 113 y.add(0, 0.0); 114 x2.add(0, 0.0); 115 y2.add(0, 0.0); 116 x3.add(0, 0.0); 117 y3.add(0, 0.0); 118 119 for(int t=1;t<lenX+1;t++){ 120 s[0]=t; 121 for(int i=1;i<lenY+1;i++){ 122 double[] d_best =new double[3]; 123 d_best[0]=d[i-1]; 124 d_best[1]=d_dash[i]; 125 d_best[2]=d_dash[i-1]; 126 double min=bigNumber; 127 for(int j=0;j<d_best.length;j++){ // 最も小さい値 128 min=Math.min(min, d_best[j]); 129 } 130 ** //この配列をコピーしたい 131 d[i] = Math.pow((double)x.get(t)-(double)y.get(i),2.0) +min; 132 ** 133 if(min==d_best[0])s[i]=s[i-1]; 134 else if(min==d_best[1])s[i]=s_dash[i]; 135 else s[i]=s_dash[i-1]; 136 137 } 138 139 //x2,y2の比較 140 141 s[0]=t; 142 for(int i=1;i<lenY+1;i++){ 143 double[] d_best =new double[3]; 144 d_best[0]=d[i-1]; 145 d_best[1]=d_dash[i]; 146 d_best[2]=d_dash[i-1]; 147 double min=bigNumber; 148 for(int j=0;j<d_best.length;j++){ // 最も小さい値 149 min=Math.min(min, d_best[j]); 150 } 151 d[i] = Math.pow((double)x2.get(t)-(double)y2.get(i),2.0) +min; 152 if(min==d_best[0])s[i]=s[i-1]; 153 else if(min==d_best[1])s[i]=s_dash[i]; 154 else s[i]=s_dash[i-1]; 155 156 //for(int i1 = 0;i1<=d.length;i1++) { 157 //System.out.println(d[i1]);} 158 //System.out.println(d_best[0]+"\n"+d_best[1]+"\n"+d_best[2]); 159 /*for(int d1 = 0;i < d.length;d1++) { 160 d[d1] = i +1; 161 } 162 System.arraycopy(d,0,X,0,200); 163 System.out.println(X);*/ 164 165 166 } 167 168 //x3.y3の比較 169 s[0]=t; 170 for(int i=1;i<lenY+1;i++){ 171 double[] d_best =new double[3]; 172 d_best[0]=d[i-1]; 173 d_best[1]=d_dash[i]; 174 d_best[2]=d_dash[i-1]; 175 double min=bigNumber; 176 for(int j=0;j<d_best.length;j++){ // 最も小さい値 177 min=Math.min(min, d_best[j]); 178 } 179 180 d[i] = Math.pow((double)x3.get(t)-(double)y3.get(i),2.0) +min; 181 if(min==d_best[0])s[i]=s[i-1]; 182 else if(min==d_best[1])s[i]=s_dash[i]; 183 else s[i]=s_dash[i-1]; 184 } 185 186 187 // SPRING-optimal case 188 if(d_min<=dtwThresh){ 189 boolean waveComp=false; 190 for(int i=1;i<lenY+1;i++){ 191 if(d[i]>=d_min || s[i]>t_end)waveComp=true; 192 else waveComp=false; 193 } 194 if(waveComp){ // 同一波形発見 195 tmpStr="[ t_start="+t_start+", t_end="+t_end+", d_min="+String.format("%.2f", d_min)+" ]"; 196 System.out.println("波形を"+tmpStr+"で検出しました。"); 197 d_min=bigNumber; 198 for(int i=1;i<lenY+1;i++){ 199 if(s[i]<=t_end)d[i]=bigNumber; 200 } 201 } 202 } 203 204 if(d[lenY]<=dtwThresh && d[lenY]<d_min){ 205 d_min=d[lenY]; 206 t_start=s[lenY]; 207 t_end = t; 208 } 209 // substitute d' for d, s' for s 210 for(int i=1;i<lenY+1;i++){ 211 d_dash[i] = d[i]; 212 s_dash[i] = s[i]; 213 } 214 } 215 } 216 217} 218

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/12/09 08:23

提示のコードのどこで配列をコピーしていて、どういう不具合があるんでしょうか。 いきなり長文のコードを読めと言われても無理ですな
guest

回答1

0

ベストアンサー

java

1double[] copy = Arrays.copyOf(ordinal, ordinal.length);

ニュアンスが伝わるように書いたので、変数名は適宜変更してください。

投稿2019/12/09 12:47

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問