※ ChatGPTを利用し、要約された質問です(原文:数値にウエイトをかけたい)
数値にウエイトをかけたい方法
このQ&Aのポイント
数値にウエイトをかける方法は、個々の数値を分解し、左から順番にウエイトをかけることです。
具体的には、与えられた数値を文字列として扱い、文字列を個々の数値に分解します。
そして、ウエイトを掛けた値を分割後の文字列格納変数に保存します。
1つずつ分解した数値に対して
左から順番にウエイト(234512345123451)を
かけたいのですが
下記の
divisions[i] = division * (i);に加える
計算式が分かりません。
アドバイスお待ちしてます。
value = reverse(value);
int maxlength = value.length();
String checkDigitValue = null;
long modulus11 = 11;
long Weight = 234512345123451l;
// 分割後の文字列格納変数
long divisions[] = new long[maxlength];
// 文字列を個々の数値に分解し、ウェイトを掛ける
for (int i = 0; i < maxlength; i++) {
long division = 0;
division = Long.parseLong(value.substring(i, i+1));
divisions[i] = division * (i);
}
お礼
下記のようなソースで 文字列を添え字で分割して ウエイトをかける方式に 切り替えて何とか出来ました。 アドバイスどうもありがとうございました。 public static String Weight1(String isbn) { Integer[] Weight1 = new Integer[15]; Weight1[0] = Integer.valueOf(isbn.substring(0, 1)); Weight1[1] = Integer.valueOf(isbn.substring(1, 2)); Weight1[2] = Integer.valueOf(isbn.substring(2, 3)); Weight1[3] = Integer.valueOf(isbn.substring(3, 4)); Weight1[4] = Integer.valueOf(isbn.substring(4, 5)); Weight1[5] = Integer.valueOf(isbn.substring(5, 6)); Weight1[6] = Integer.valueOf(isbn.substring(6, 7)); Weight1[7] = Integer.valueOf(isbn.substring(7, 8)); Weight1[8] = Integer.valueOf(isbn.substring(8, 9)); Weight1[9] = Integer.valueOf(isbn.substring(9, 10)); Weight1[10] = Integer.valueOf(isbn.substring(10, 11)); Weight1[11] = Integer.valueOf(isbn.substring(11, 12)); Weight1[12] = Integer.valueOf(isbn.substring(12, 13)); Weight1[13] = Integer.valueOf(isbn.substring(13, 14)); Weight1[14] = Integer.valueOf(isbn.substring(14, 15)); //Weight(1) = //234512345123451 Integer total =( Weight1[0] * 2*2 %11) +(Weight1[1] * 3*2 %11) +(Weight1[2] * 4*2 %11 )+(Weight1[3] * 5*2 %11) +(Weight1[4] * 1*2 %11) +(Weight1[5] * 2*2 %11) +(Weight1[6] * 3*2 %11) +(Weight1[7] * 4*2 %11 )+(Weight1[8] * 5*2 %11) +(Weight1[9] * 1*2 %11) +(Weight1[10] * 2*2 %11) +(Weight1[11] * 3*2 %11) +(Weight1[12] * 4*2 %11) +(Weight1[13] * 5*2 %11 )+(Weight1[14] * 1*2 %11); total = (total % 11); /* 下1桁を11で引く */ String totals = String.valueOf(total); Integer digit = 11 - Integer.valueOf(totals.substring( totals.length() - 1, totals.length())); if (digit == 10) { return "0"; } else if ( digit == 11) { return "0"; } else if ( digit == 1) { return "0"; } else if ( digit == 0) { return "-"; } else { } return String.valueOf(digit); }
補足
アドバイスどうもありがとうございます。 やりたいことは以下のようになります。 Weight 234512345123451に対して long division = 0; division = Long.parseLong(value.substring(i, i+1)); 配列の添え字によって divisions[0]は×2 divisions[1]は×3 divisions[2]は×4 Weightをかけていきたいので divisions[i] = division * (i ); で計算できないのかと思ったのですが・・・