[英]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.