Java 输出不正确
当我做不同的组合,比如d-c+a+b,它会给我一个精确的数字,比如118.0。有人能告诉我在我的代码中我的计算哪里错了吗。。 多谢各位 ValVarPairs.txt包含以下数字->a=100、b=5、c=10、d=13 这是我编的代码Java 输出不正确,java,parsing,Java,Parsing,当我做不同的组合,比如d-c+a+b,它会给我一个精确的数字,比如118.0。有人能告诉我在我的代码中我的计算哪里错了吗。。 多谢各位 ValVarPairs.txt包含以下数字->a=100、b=5、c=10、d=13 这是我编的代码 package com.ecsgrid; import java.io.*; public class testC { public static void main(String[] args) { int i = 0,j = 0; double
package com.ecsgrid;
import java.io.*;
public class testC {
public static void main(String[] args) {
int i = 0,j = 0;
double result, values[] = new double[4];
char k, operators[] = new char[3];
for (i = 0; i <= 2; i++)
operators[i] = '+'; // default is to add the values
File myfile;
StreamTokenizer tok;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String InputText;
i = 0;
try {
myfile = new File("C:\\VarValPairs.txt");
tok = new StreamTokenizer(new FileReader(myfile));
tok.eolIsSignificant(false);
while ((tok.nextToken() != StreamTokenizer.TT_EOF) && (i <= 3)){
if ((tok.ttype == StreamTokenizer.TT_NUMBER))
values[i++] = tok.nval;
}
}
catch(FileNotFoundException e) { System.err.println(e); return; }
catch(IOException f) { System.out.println(f); return; }
System.out.println("Enter letters and operators:");
try {
InputText = in.readLine();
}
catch(IOException f) { System.out.println(f); return; }
for (i = 0; i < InputText.length(); i++)
{
k = InputText.charAt(i);
if ((k == '+') || (k == '-'))
{
if (j <= 2) operators[j++] = k;
}
}
result = values[0];
for (i = 0; i <= 2; i++){
if (operators[i] == '+')
result = result + values[i+1];
else
result = result - values[i+1];
}
System.out.println(result);
}
}
package com.ecsgrid;
导入java.io.*;
公共类testC{
公共静态void main(字符串[]args){
int i=0,j=0;
双精度结果,值[]=新的双精度[4];
字符k,运算符[]=新字符[3];
对于(i=0;i,如果您的输入是-++
您从不分析顺序或a、b、c和d。您总是假定顺序为a->b->c->d
因此,d-c+a+b将是:a-b+c+d,这与您提供的输出一致(100-5+10+13=118)
OP代码
for(i=0;i 如果(j让我们调试一下,添加一些系统输出
这是您将看到的每一步
100.0 - 5.0
95.0 + 10.0
105.0 + 13.0
118.0
值数组是{100,5,10,13},运算符数组是{-,+,+}
您还没有映射a=100、b=5、c=10、d=13,除非您映射它们,然后使用基于非操作数输入键的映射来解析操作数,否则它将不起作用
所以,如果我使用角色的int值,我就可以这样翻译它
import java.io.*;
public class TestC {
public static void main(String[] args) {
int i = 0, j = 0;
double result, values[] = new double[4];
char k, operatorsAndOperands[] = new char[3];
for (i = 0; i <= 2; i++)
operatorsAndOperands[i] = '+'; // default is to add the values
File myfile;
StreamTokenizer tok;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String InputText;
i = 0;
try {
myfile = new File("C:\\VarValPairs.txt");
tok = new StreamTokenizer(new FileReader(myfile));
tok.eolIsSignificant(false);
while ((tok.nextToken() != StreamTokenizer.TT_EOF) && (i <= 3)) {
if ((tok.ttype == StreamTokenizer.TT_NUMBER))
values[i++] = tok.nval;
}
for (int l = 0; l < values.length; l++) {
System.out.println(values[l]);
}
} catch (FileNotFoundException e) {
System.err.println(e);
return;
} catch (IOException f) {
System.out.println(f);
return;
}
System.out.println("Enter letters and operators:");
try {
InputText = in.readLine().toUpperCase();
} catch (IOException f) {
System.out.println(f);
return;
}
if(InputText.length() > 0){
operatorsAndOperands = new char[InputText.length()];
} else {
System.out.println("No Operations specified");
return;
}
for (i = 0; i < InputText.length(); i++) {
k = InputText.charAt(i);
operatorsAndOperands[j++] = k;
}
result = 0;
for (i = 0; i < operatorsAndOperands.length; i++) {
System.out.println(operatorsAndOperands[i] + " " + (int)operatorsAndOperands[i]);
if(i+1<operatorsAndOperands.length)
System.out.println(operatorsAndOperands[i+1]);
switch(operatorsAndOperands[i]){
case '+':
if(operatorsAndOperands[i+1] != '+' && operatorsAndOperands[i+1] != '-'){
result+=values[(int)operatorsAndOperands[i+1] - (int)'A'];
i++;
}
break;
case '-':
if(operatorsAndOperands[i+1] != '+' && operatorsAndOperands[i+1] != '-'){
result-=values[(int)operatorsAndOperands[i+1] - (int)'A'];
i++;
}
break;
default:
result = values[(int)operatorsAndOperands[i] - (int)'A'];
break;
};
System.out.println(result);
}
System.out.println(result);
}
}
import java.io.*;
公共类TestC{
公共静态void main(字符串[]args){
int i=0,j=0;
双精度结果,值[]=新的双精度[4];
字符k,运算符和操作数[]=新字符[3];
对于(i=0;i)如果K不是,我如何选择哪一个是运算符t@soupi7在某个时刻,k将是每个字符。您现在正在遍历整个字符串,查找运算符,并将它们放入数组中。在此过程中,如果k不是运算符(If语句上的else)然后你需要实现某种逻辑来保存它是哪个字符。在第一次迭代中,k将是d。把“d”放在数组中,你知道它是第一个。我把d放在数组中,同样的问题仍然可以。你能重写它吗?这样它会告诉我k将被d和d放在数组中吗?谢谢cruncher,我已经解决了它。一种方法是to使用Hashmap将a映射到100 b到5等,或使用字符的int值获取运算符值,请参见我的编辑。非常感谢您的帮助,我已经在您的帮助下解决了此问题。学会使用调试程序不要再发布类似的重复项。
import java.io.*;
public class TestC {
public static void main(String[] args) {
int i = 0, j = 0;
double result, values[] = new double[4];
char k, operatorsAndOperands[] = new char[3];
for (i = 0; i <= 2; i++)
operatorsAndOperands[i] = '+'; // default is to add the values
File myfile;
StreamTokenizer tok;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String InputText;
i = 0;
try {
myfile = new File("C:\\VarValPairs.txt");
tok = new StreamTokenizer(new FileReader(myfile));
tok.eolIsSignificant(false);
while ((tok.nextToken() != StreamTokenizer.TT_EOF) && (i <= 3)) {
if ((tok.ttype == StreamTokenizer.TT_NUMBER))
values[i++] = tok.nval;
}
for (int l = 0; l < values.length; l++) {
System.out.println(values[l]);
}
} catch (FileNotFoundException e) {
System.err.println(e);
return;
} catch (IOException f) {
System.out.println(f);
return;
}
System.out.println("Enter letters and operators:");
try {
InputText = in.readLine().toUpperCase();
} catch (IOException f) {
System.out.println(f);
return;
}
if(InputText.length() > 0){
operatorsAndOperands = new char[InputText.length()];
} else {
System.out.println("No Operations specified");
return;
}
for (i = 0; i < InputText.length(); i++) {
k = InputText.charAt(i);
operatorsAndOperands[j++] = k;
}
result = 0;
for (i = 0; i < operatorsAndOperands.length; i++) {
System.out.println(operatorsAndOperands[i] + " " + (int)operatorsAndOperands[i]);
if(i+1<operatorsAndOperands.length)
System.out.println(operatorsAndOperands[i+1]);
switch(operatorsAndOperands[i]){
case '+':
if(operatorsAndOperands[i+1] != '+' && operatorsAndOperands[i+1] != '-'){
result+=values[(int)operatorsAndOperands[i+1] - (int)'A'];
i++;
}
break;
case '-':
if(operatorsAndOperands[i+1] != '+' && operatorsAndOperands[i+1] != '-'){
result-=values[(int)operatorsAndOperands[i+1] - (int)'A'];
i++;
}
break;
default:
result = values[(int)operatorsAndOperands[i] - (int)'A'];
break;
};
System.out.println(result);
}
System.out.println(result);
}
}