・配列の走査方向をちゃんと考えようぜ。
・近い将来、ジェネリクスを知ったときに赤面するんだろうな。
... あと、double 版では昭和か平成にでもなるんでしょうかね。
class Utils { /** * int 配列の要素の総和を求める。 * * @param arr 計算対象の配列 */ public static int sum(int[] arr) { int sum = 0; for(int i: arr) { sum += i; } return sum; } /** * int 配列の要素の位置を、ひとつずつ後ろにずらす。 * 配列の先頭要素の値はそのままとする。 * * @param arr 処理大正となる配列 */ public static void shiftRight(int[] arr) { for(int i = 0; i < arr.length - 1; ++i) { // ↓ここで i + 1 しているので、ループ条件を i < arr.length - 1 にするのが重要! arr[i + 1] = arr[i]; } } // TODO long 版, double 版も用意すること } class Main { public static void main(String args[]) { // 適当な配列でテストしてみる。 int[] arr = { 2, 1, 3, 4 }; System.out.println(Utils.sum(arr)); // 2 + 1 + 3 + 4 => 10 Utils.shiftRight(arr); System.out.println(Utils.sum(arr)); // 2 + 2 + 1 + 3 => 8 } }
使い方ヒント: 「これは臭う」という行を見付けたら、各行のをクリックしてマーキングしておきましょう(要Twitter OAuth認証)
ArrayListクラスのadd()じゃだめなのかな
ハンドル→インド人
元ネタ知らない人が見たらなんのこっちゃチンプンカンプンでしょうなあ(笑
Genericsだとこんな感?(適当に書いたので、インデックス間違ってるかも知れないけど)
List<Integer> list = Arrays.asList(arr); for (int elem : arr) { list.add(elem); } list.add(0, arr[arr.length -1]); list.remove(list.size() -1);
http://java.sun.com/javase/ja/6/docs/ja/api/java/util/List.html#add(int, E)
配列にしなければならないのであれば、引数が入出力なので、配列を逆から舐めるのが手っ取り早いかも…
あー、私が言いたかったのは右シフトじゃなくて総和の方ね。右シフトは普通に Generics で書けるのはわかるんだけど、総和は無理じゃね ? って言いたかったんです。T extends Number
くらいにしても演算メソッドがないしできんやろ ? と思った。
コメント投稿には、twitter認証が必要です。
Twitter認証
答が偶然にも一致するからバグに気付かないという壮大なオチまでつけてくださりありがとうございます。素晴らしいウンコード。