2013-10-01 89 views
0

好了,所以我有這個概念,如何檢查的重複下去,因爲我正在做一個項目,包括不推多個值到堆棧。到目前爲止,我的代碼是標準的,將掃描器保存爲一個字符串,將字符串保存到數組,然後將此while循環。While循環檢查重複的字符

int c=0; 
    while(counter < inAr.length) 
    { 
    String w1 = inAr[c]; 
    String w2 = inAr[c + 1]; 
    if(w1 != w2) 
    { 
     counter++; 
     so.push(inAr[c]); 
     c++; 
     temp++; 
    } 
    else 
    { 
     counter++; 
     c++; 
    } 
    } 

好的,等問題出現了。我得到了inAr [c + 1]的arrayindexoutofbounds,但我沒有得到的是inAr [1],inAr [2]等所有保存值。如果我喜歡一個常數代替[C + 1] [1]程序不罰款,工程....我很迷失在這一點上,任何人都可以提供一些幫助,請

+4

你覺得'ArrayIndexOutOfBoundsException'意味着什麼? –

+0

什麼是計數器初始化? – fvrghl

+2

你爲什麼要談論「重複的字符」,但比較「字符串」*引用*? – Holger

回答

3

時考慮的情況下c = inAr.length-1

在這一點上,我們將進入while循環(如ccounter具有相同的值在每次迭代中,假設初始化爲0)

inAr[c+1]真的inAr[inAr.length]它總是出界。

FIX:改變你的循環來while(counter < inAr.length - 1)或初始化計數器1

編輯:你也應該不==!=比較字符串。您的if語句應該是:

if(!w1.equals(w2)) 

但是這與實際問題無關,只是稍後可能會導致問題。

0

這意味着你試圖訪問一個元素從數組中的如。數組長度爲10,並且您試圖訪問索引11

+2

甚至試圖訪問索引10(這是初學者常見的困惑),因爲長度爲10的數組的索引爲0-9。 – kevinsa5

0

你的代碼是不是在循環的開始突破,而是循環的結束。

c總是等於counter當條件被檢查,並且最終,counter將等於inArr.length - 1和c + 1將等於inArr.length

由於數組總是在索引0(而不是1)開始,當你執行類似

mystr = inAr[inArr.length] 

這你時,你們會的最後一次迭代切實做好你總是會得到一個異常循環。