-3
私はかなり数値と演算子の文字列を取り、それらを分割し、次に計算をしているプログラムを書いています。 Forループ内の各演算子に対して4つのIF文があります。コードはコンパイルされますが、私にはIndexOutOfBoundsExceptionが与えられます。0のサイズ:0行目は70と28になります。これはどうして起こっているのですか?ありがとう。IndexOutOfBoundsExceptionインデックス0サイズ0
import java.util.*;
import java.io.*;
public class Lab8
{
public static void main(String[] args)
{
if (args.length<1) { System.out.println("FATAL ERROR: Missing expression on command line\nexample: java Lab8 3+13/5-16*3\n"); System.exit(0); }
String expr= args[0]; // i.e. somethinig like "4+5-12/3.5-5.4*3.14";
System.out.println("expr: " + expr);
ArrayList<String> operatorList = new ArrayList<String>();
ArrayList<String> operandList = new ArrayList<String>();
StringTokenizer st = new StringTokenizer(expr,"+-*/", true);
while (st.hasMoreTokens())
{
String token = st.nextToken();
if ("+-/*".contains(token))
operatorList.add(token);
else
operandList.add(token);
}
System.out.println("Operators:" + operatorList);
System.out.println("Operands:" + operandList);
double result = evaluate(operatorList, operandList);
System.out.println("The expression: " + expr + " evalutes to " + result + "\n");
} // END MAIN
static double evaluate(ArrayList<String> operatorList, ArrayList<String> operandList)
{
String operator;
double result;
ArrayList<Double> andList = new ArrayList<Double>();
for(String op : operandList)
{
andList.add(Double.parseDouble(op));
}
for(int i=0;i<operatorList.size();++i)
{
if(operatorList.get(i).equals("*"))
{
operator = operatorList.get(i);
}
result = andList.get(i) * andList.get(i+1);
andList.set(i,result);
//operandList.set(i,result);
andList.remove(i+1);
operatorList.remove(i);
if(operatorList.get(i).equals("/"))
{
operator = operatorList.get(i);
}
result = andList.get(i)/andList.get(i+1);
andList.set(i,result);
andList.remove(i+1);
operatorList.remove(i);
if(operatorList.get(i).equals("+"))
{
operator = operatorList.get(i);
}
result = andList.get(i) + andList.get(i+1);
andList.set(i,result);
andList.remove(i+1);
operatorList.remove(i);
if(operatorList.get(i).equals("-"))
{
operator = operatorList.get(i);
}
result = andList.get(i) - andList.get(i+1);
andList.set(i,result);
andList.remove(i+1);
operatorList.remove(i);
}
return andList.get(0);
}
} //
どの行が70と28ですか?私たち自身のために数えないでください...ところで、JavaScriptとJavaは完全に別の言語であるため、あなたの質問から「JavaScript」タグを削除しました。 – nnnnnn
'return andList.get(0);'このリストは空です –
それをコンパイルし、 'expr'にサンプル値を手動で入力すると、例外がスローされません:expr:4 + 5-12/3.55.4 * 3.14 オペレータ:[+、 - 、/、 - 、*] オペランド:[4,5,12,3.5,5.4,3.14] 式:4 + 5-12/3.5-5.4 * 3.14 evalutes to -0.2333333333333334 終了コード0で処理が完了しました – Coop