簡體   English   中英

字符串數組迭代和startsWith()

[英]String Array iteration and startsWith()

我有一堂課負責動畫一些圖像。 我有3個播放器類,每個播放器類都創建自己的動畫類實例。 每個播放器類都向我的動畫類發送一個String路徑和一個文件名的String數組。 因此,即時通訊正在檢查文件名的字符串數組是否以上,下,左或右開頭。 然后,將它們添加到一個緩沖圖像數組中,總共命名為上,下,左和右4個。

現在,例如,當玩家想要向左移動時,left []將進行動畫處理,向上方向也將進行動畫處理,等等。問題是每個陣列中僅存儲一個圖像。 例如,緩沖圖像的up []僅保存一個圖像,而它們應該為3(每個方向有3個圖像)。 我不知道。

以下代碼來自處理數組的我的Animation類。 有人可以告訴我我是否想念東西嗎?

如果這完全沒有道理,我深表歉意:)...聽起來很不錯

謝謝

try
    {
        for (String file : fileName)
        {
            String path = PATH + file + EXT;

            for (int i = 0; i < arrayLength; i++)
            {
                if (file.startsWith("u"))
                {
                    up[i] = ImageIO.read(new File(path));
                }

                if(file.startsWith("d"))
                {
                    down[i] = ImageIO.read(new File(path));
                }

                if (file.startsWith("l"))
                {
                    left[i] = ImageIO.read(new File(path));
                }

                if (file.startsWith("r"))
                {
                    right[i] = ImageIO.read(new File(path));
                }
            }
        }
    }
    catch (IOException e)
    {
        System.out.println("Could not load images: " + e);
    }
    catch (ArrayIndexOutOfBoundsException e)
    {
        System.out.println("Array out of bounds: " + e);
    }

這是一個無答案的答案。 使用調試器在此方法中設置斷點。 您是否正在像Eclipse這樣的IDE中運行此代碼? 當您實際看到程序的執行流程時,導致此問題的根本原因將容易得多-對於想要真正理解某些給定代碼的開發人員來說,它是必不可少的工具。 作為附帶說明,我認為您的問題與arrayLength

我在遵循您的描述時遇到了一些麻煩,但是在這里查看您的代碼是我對可能存在問題的想法。 首先與您的問題無關的編碼建議,您有使用ifs測試的互斥情況(file.startsWith(...)),您應該擁有其他情況,以便當一個測試結果為陽性時,其他情況可以忽略:

for (String file : fileName) {
  String path = PATH + file + EXT;

  for (int i = 0; i < arrayLength; i++) {
    if (file.startsWith("u")) {
      up[i] = ImageIO.read(new File(path));
    } else if(file.startsWith("d")) {
      down[i] = ImageIO.read(new File(path));
    } else if (file.startsWith("l")) {
      left[i] = ImageIO.read(new File(path));
    } else if (file.startsWith("r")) {
      right[i] = ImageIO.read(new File(path));
    }
  }
}

至於代碼的邏輯,我看到的一個潛在問題是您的數組索引似乎未正確鏈接到文件。 截至目前,您的代碼可以在不改變其效果的情況下進行重寫:

for (String file : fileName) {
  String path = PATH + file + EXT;

  BufferedImage array = null;
  if (file.startsWith("u")) {
    array = up;
  } else if(file.startsWith("d")) {
    array = down;
  } else if (file.startsWith("l")) {
    array = left;
  } else if (file.startsWith("r")) {
    array = right;
  }

  for (int i = 0; i < arrayLength; i++) {
    array[i] = ImageIO.read(new File(path));
  }
}

您只需在外循環的每次迭代中編寫一條指向整個數組(或變量“ arrayLength”包括的任何部分)的相同路徑的新緩沖圖像。 因此,如果每次“文件”都是相同的類型(即startsWith是相同的值),則您的數組將永遠只包含fileName數組中的最后一項。

我將在這里開始猜測您的意圖。 我假設fileName中的每個String是一個路徑,應該是該動畫在該特定方向上數組中的下一個圖像,因此您需要的是每個數組中的單獨索引:

int upArrayIndex = 0, downArrayIndex = 0,
   leftArrayIndex = 0, rightArrayIndex = 0;
for (String file : fileName) {
  String path = PATH + file + EXT;

  if (file.startsWith("u")) {
    up[upArrayIndex++] = ImageIO.read(new File(path));
  } else if(file.startsWith("d")) {
    down[downArrayIndex++] = ImageIO.read(new File(path));
  } else if (file.startsWith("l")) {
    left[leftArrayIndex++] = ImageIO.read(new File(path));
  } else if (file.startsWith("r")) {
    right[rightArrayIndex++] = ImageIO.read(new File(path));
  }
}

我希望這對於您要提出的問題是正確的,或者至少會讓您知道從哪里開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM