簡體   English   中英

當我只調用一次時,我的方法運行兩次

[英]My method is running twice when it is only called once

所以我從另一個類調用方法makeCard(String info)。 它第一次運行時工作正常,但第二次調用方法它似乎運行兩次,這會產生一個StringIndexOutOfBoundsException運行時錯誤,我似乎無法弄清楚原因。 我對Java有點新意,所以我可能會遺漏一些顯而易見的東西,但我腦子里的邏輯說如果調用一次它應該只運行一次。 希望有人可以指出我的錯誤。

這是方法:

public void makeCard(String info){
    cInfo = new StringBuffer(info);
    int i = 0;

    while(cInfo.charAt(i)== ' '){
        cInfo.deleteCharAt(i);
    }
    while(cInfo.charAt(cInfo.length()-1)== ' '){
        cInfo.deleteCharAt(cInfo.length()-1);
        i--;
    }
    seperateValues();
    makeObject();
}

這里是它的所在地:

@Override
public void actionPerformed(ActionEvent e) {
    MainWindow mw = new MainWindow();
    CardBreakdown cb = new CardBreakdown();
    if("submit".equals(e.getActionCommand())){
        cb.makeCard(cardInfo.getText());
        mw.removeAddPanel();
        cardInfo.setText("");
    }
}

提前感謝您提供的任何幫助

這是錯誤:線程“AWT-EventQueue-0”中的異常java.lang.StringIndexOutOfBoundsException:字符串索引超出范圍:0

我要做的第一件事是在makeCard()使用對String.trim()的簡單調用替換這兩個while循環 - 該函數將為您刪除前導和尾隨空格。

您通常應該總是更喜歡使用庫調用來創建自己的函數, 尤其是在處理空字符串或僅包含空格的字符串時可能具有相當致命缺陷的函數:-)

對於字符串為空或變空的情況,沒有檢查任何一個循環,這意味着charAt會抱怨。

如果info為空或null,該怎么辦? 然后cInfo.charAt(0)將返回您獲得的錯誤。 您應該在makeCard方法的開頭進行空或空檢查

只需從字符串中刪除所有出現的空格字符,就會對您的代碼進行不必要的復雜處理。 代替:

cInfo = info.trim();

暫無
暫無

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

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