Javaのコードのことで質問があります
中置表記法を後置表記法に変換するプログラムをJavaで作成し、コンパイルには成功したのですが、実行時に
Exception in thread "main" java.lang.ArrayIndexOutOfBour
at gotPriority.gotPriority(toPostfix.java:31)
at toPostfix.main(toPostfix.java:150)
というエラーが出てしまい、正常な実行が出来なくて非常に困っています
どういうエラーなのかよくわからず、コードの31行目と150行目をよく見てみたのですが、エラーがある理由もよくわかりませんでした。
ご助言くださると助かります
ソースコードの内容は
import java.io.*;
//gotPriorityは、数式の各要素に優先度を与えるメソッドである。
//数式の要素の優先度は、それぞれ下記のようになる。
// 数式の要素 優先度
// ( 4
// 0~9 3
// *,/ 2
// +,- 1
// ) 0
class gotPriority
{
private char lse[] = {'0','1','2','3','4','5','6','7','8','9','+','-','*','/','(',')','E'};
private int priority[] = {3,3,3,3,3,3,3,3,3,3,1,1,2,2,4,0,-1},i;
public int gotPriority(char e)
{
for(i=0; i<lse.length ; i++ )
{
if(e == lse[i]) break;
}
return priority[i];
}
}
class stac
{
char stac[] = new char[100];
char ret;
int top = 0;
void initStack()
{
stac[0] = 'E';
}
void push(char c)
{
top++;
stac[top] = c;
}
char pop()
{
ret = stac[top];
top--;
return ret;
}
char Top()
{
return stac[top];
}
}
class toPostfix
{
public static void main(String[] args) throws IOException
{
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("数式を入力してください");
String str = br.readLine();
System.out.println("数式を後置表記法に変換します");
int a = 0;
int i = 0;
gotPriority got1 = new gotPriority();
stac stac1 = new stac();
String Ex = new String(str);
int Exp = Ex.length();
char Exptext[] = new char[Exp];
char toPostfix[] = new char[Exp];
for(int d=0; d < Exp; d++)
{
Exptext[d] = Ex.charAt(d);
}
for(i = 0 ; i < Exp ; i++ )
{
while(got1.gotPriority(Exptext[i]) <= got1.gotPriority(stac1.Top()) && stac1.Top() != '(')
{
toPostfix[a] = stac1.pop();
a++;
}
if(Exptext[i] != ')')
{
stac1.push(Exptext[i]);
}
else
{
stac1.pop();
}
}
boolean sflag = true;
for( ; sflag == true ; )
{
char ret = stac1.pop();
if(ret != 'E')
{
toPostfix[a] = ret;
a++;
}
else
{
sflag = false;
}
}
for(a = 0 ; a < Exp ; a++ )
{
System.out.print(toPostfix[a]);
}
}
}
です
お礼
回答ありがとうございます。 Page renderPageWithAd() throws InterruptedException { long endNanos = System.nanoTime() + TIME_BUDGET; Future<Ad> f = exec.submit(new FetchAdTask()); try { Page page = renderPageBody(); Ad ad; try { long timeLeft = endNanos - System.nanoTime(); ad = f.get(timeLeft, NANOSECONDS); } catch (ExecutionException e) { ad = DEFAULT_AD; } catch (TimeoutException e) { ad = DEFAULT_AD; f.cancel(true); } page.setAd(ad); return page; } finally { exec.shutdown(); } } 無事終了するようになりました。 ProKaseifuさん、ありがとうございます。