簡體   English   中英

Java JFrame字符串索引超出范圍錯誤

[英]Java JFrame String Index Out of Bounds Error

我正在Net-beans JFrame中制作計算器,並使用堆棧來幫助計算輸入的變量。 我似乎已經遇到了此錯誤StringIndexOutOfBounds:0,而且我似乎無法弄清楚在發生這種情況時如何解決。 每當我按下啟動堆棧的相等按鈕時,就會彈出錯誤。 我認為我的Stack出了點問題,但我仍然無法弄清楚。 我真的需要對此有一些新的了解。

我使用/導入了秋千和.awts,但我不認為它們給我帶來的錯誤是我的秋千。

    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import static java.lang.Math.round;
    import java.util.NoSuchElementException;
    import java.util.Scanner;
    import javax.swing.JFileChooser;

這是我的堆棧:

   public class StackCalc 
{
private LinkedList stackList = new LinkedList();
private int top, maxTop;
public Object removedEle;
public Object topEle;

public StackCalc(int mt)
{
    maxTop=mt;
    top=-1;
}
public boolean isFull()
{
    return top == maxTop-1;
}
public boolean push (Object O)
{
    if(!isFull())
    {
        stackList.addFirst(O);
        top++;
        return true;
    }
    else
    {
        return false;
    }
}
public boolean pop()
{
    if(!stackList.isEmpty())
    {
        removedEle= stackList.removeFirst();
        top--;
        return true;
    }
    else 
    {
        return false;
    }
}
public void getTop()
{
    topEle=stackList.getFirst();
}
public boolean isEmpty()
{
    return stackList.isEmpty();
}

}

這是我認為給我這個錯誤的代碼

   static void processExpR(String exp)
    {
       boolean advance = true;
       String token = " ";
       int loc = exp.indexOf(token);
       while (loc != -1)
       { 
           if (token.isEmpty()){
               return;
           }
               else if (advance){
               token = exp.substring(0,loc);
               exp = exp.substring(loc+1);
           }

           char ch = token.charAt(0);//there is a specific problem with this line
           if(Character.isDigit(ch)){
               advance = true;
               s1R.push(token);
           }
           else
           {
               if(s2R.isEmpty())
               {
                   advance = true;
                   s2R.push(token);
               }
               else
               {
                   advance = false;
                   calcR();
               }
           }
           if(advance){
               loc = exp.indexOf(" ");
           }
       }//end of while
       if (Character.isDigit(exp.charAt(0)))
       {
           s1R.push(exp);
       }
       else
       {
           s2R.push(exp);
       }
       while (!s2R.isEmpty())
       {
         calcR();  
       }   
    }

任何幫助將非常感激。 我真的很迷失在這里。 謝謝。

問題來了:

token = exp.substring(0,loc);

上一行從exp獲取一個子字符串。 稍后,您執行以下操作:

char ch = token.charAt(0);//there is a specific problem with this line

發生的是:從exp剪切並存儲到令牌中的字符串為 因此,當您嘗試訪問該字符串的索引0時,系統會告訴您:該字符串甚至沒有索引0(並且只有在token空時才會發生!)。

因此,這里的答案有兩個:

  1. 在進行諸如charAt(someIndex)之類的調用之前,最好先檢查一下字符串是否確實具有該索引
  2. 但就您而言,僅進行檢查無濟於事。

您會看到,您的問題基本上是您計算“子字符串”索引的邏輯可能是錯誤的。

我的建議是:坐下,然后手動處理輸入數據。 含義:使用示例輸入,並手動執行程序。 要了解您的計數器/索引變量的外觀,請了解您的代碼對其輸入的實際作用。 如果您覺得這太麻煩了,那么至少要學會使用調試器來做到這一點(但是,一次手動完成兩次,仍然會告訴您50或100個以上的答案!)

暫無
暫無

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

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