[英]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為空時才會發生!)。
因此,這里的答案有兩個:
您會看到,您的問題基本上是您計算“子字符串”索引的邏輯可能是錯誤的。
我的建議是:坐下,然后手動處理輸入數據。 含義:使用示例輸入,並手動執行程序。 要了解您的計數器/索引變量的外觀,請了解您的代碼對其輸入的實際作用。 如果您覺得這太麻煩了,那么至少要學會使用調試器來做到這一點(但是,一次手動完成兩次,仍然會告訴您50或100個以上的答案!)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.