LoginSignup
hsjyr1112
@hsjyr1112

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

オブジェクトの座標交換をループでしたい。

オブジェクトのx座標を交換したい。
processing言語の質問です。
オブジェクトの情報を交換するループがうまく行きません。教えてください。
以下はプログラムです。全体のプログラムの一部を抜粋しています。

 void setX() {
  int j=0;
  int []data=new int[member2-clickedIndex+1];
  if (clickedIndex!=-1) {
    
if (clickedIndex < member2 && clickedIndex >= 0) {
if (staff[clickedIndex].isTimerOn && clickingTimer) {
 while (j<member2) {
if (staff[j].position==member2) {
 int tmp=staff[j].x;
  for (int k=clickedIndex;
  k<=member2-1; k++) {
 for (int i =clickedIndex+1; i <=member2; i++) {
 if (staff[i].position==k) {
    data[k]=staff[i].x;
 }
 }
 for (int i=0; i<=member2; i++) {
 if (staff[i].position==k+1) {
            data[k]=staff[i].x;
  }
   }
  print(data[k]);
  }
    staff[clickedIndex].x=tmp;
          }
          j++;
        }
        clickingTimer=false;
      }
    }
  }
}

以上です。
clickedIndexはキーボードから入力された要素数です。
staff.xには情報とx座標がはいっています。staff.positionはwindowをmember2でわったx座標が、格納されています。
staff.xは移動する情報でstaff.positionはその情報をしまう箱のような役割をしています。この情報を箱にしまるループがうまくいきません。
forループでは、配列であらわすと、例えばint data【5】={1,2,3,4,5}があったとして、キーボードで要素数の1を入力した
3,4,5,1,2,というようにループでずれ、次にキーボードで2を入力したら、3,4,1,2,5となるプログラムをつくりたいのですが、この動きがうまくいきません。
このとき
int []data=new int[member2-clickedIndex+1];のmember2-clickedIndex+1というのは先程例に上げた配列の要素数がmember2にあたり、キーボードで入力したものがclickedIndexにあたるので、clickedIndex以降の数字をループで動かすために
int []data=new int[member2-clickedIndex+1];となっております。
プログラムではstaff.position[j]に入ってるstaff.xを見つけ出して、別の箱に移動させらるように準備をしています。

この箱の移し替えの作業が例に上げた配列のループのように動かすにはどうしたらいいでしょうか?

プログラム初心者で言葉足らずなとこもありますがよろしくお願いいたします。

ここに解決したい内容を記載してください。

0

1Answer

forループでは、配列であらわすと、例えばint data【5】={1,2,3,4,5}があったとして、キーボードで要素数の1を入力した
3,4,5,1,2,というようにループでずれ、次にキーボードで2を入力したら、3,4,1,2,5となるプログラムをつくりたいのですが、この動きがうまくいきません。

{1,2,3,4,5} キーボードで要素数の1 → {3,4,5,1,2}
{3,4,5,1,2} キーボードで要素数の2 → {3,4,1,2,5}
この規則性がまったく理解できません。

コードもインデントが無茶苦茶で読む気が薄れます。コードブロックにちゃんと入れるように修正してください。

0

Comments

  1. @hsjyr1112

    Questioner

    回答を修正しました。
    規則性は入力された要素数は末尾におき、それ以降を前倒しにするものになります。
    よろしくお願い致します。

  2. 規則性は入力された要素数は末尾におき、それ以降を前倒しにするものになります。
    よろしくお願い致します。

    例に挙げた配列の変化は、その規則になっていますか??
    すみませんが、私には読み取れません。

    回答を修正しました。

    インデントを正しくするだけで、バグが見つかることもありますよ。

  3. @hsjyr1112

    Questioner

    失礼いたしました。
    int data【5】={1,2,3,4,5}
    キーボードで要素数の1を入力したら、
    1,3,4,5,2
    要素数0を入力したら
    3,4,5,2,1
    です。
    よろしくお願いいたします。

  4. 規則については理解しました。

    ↓このコードとの違いを確認して貰えば分かるかと思います。

    int[] rote(int[] data, int index) {
        if (index < 0) { return data; }
        if (index >= data.length - 1) { return data; }
        int[] result = new int[data.length];
        for (int i=0; i<index; i++) {
            result[i] = data[i];
        }
        for (int i=index; i<data.length-1; i++) {
            result[i] = data[i+1];
        }
        result[data.length-1] = data[index];
        return result;
    }
    
    int[] data = {1, 2, 3, 4, 5};
    int[] data1 = rote(data, 1);
    print(data1); //{1, 3, 4, 5, 2}
    int[] data2 = rote(data1, 0);
    print(data2); //{3, 4, 5, 2, 1}
    
  5. @hsjyr1112

    Questioner

    わかりました。
    試してみます。
    私の説明不足にもかかわらずご意見していただきありがとうございます。

Your answer might help someone💌