Java 计算十六进制数时出错
当我计算(13+)时,我得到了正确的答案。但当我像(A1+)那样计算语句时,我得到了错误的答案 在这个问题中,我尝试计算十六进制语句,如(57+7*8+~) 这是代码Java 计算十六进制数时出错,java,netbeans-7,hex,Java,Netbeans 7,Hex,当我计算(13+)时,我得到了正确的答案。但当我像(A1+)那样计算语句时,我得到了错误的答案 在这个问题中,我尝试计算十六进制语句,如(57+7*8+~) 这是代码 import java.io.*; import java.util.Stack; /** * * @author Dilini */ public class Acadox { /** * @param args the command line arguments */ pu
import java.io.*;
import java.util.Stack;
/**
*
* @author Dilini
*/
public class Acadox {
/**
* @param args the command line arguments
*/
public static boolean isOperator(String c)
{
return ( "+".equals(c) || "-".equals(c) || "&".equals(c) || "|".equals(c) || "~".equals(c) || "X".equals(c));
}
/* public String convert(String str)
{
char[] chars = str.toCharArray();
StringBuffer strBuffer = new StringBuffer();
for (int i = 0; i < chars.length; i++)
{
strBuffer.append(Integer.toHexString((int) chars[i]));
}
return strBuffer.toString();
}*/
public static void main(String[] args)throws IOException {
// TODO code application logic here
try
{
BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
String s[]=read.readLine().split(" ");
Stack<String> st=new Stack<String>();
st.push(s[0]);
int i=1;
int num1,num2,result=0;
if(isOperator(s[1]) && !"~".equals(s[1]))
{
System.out.println("ERROR");
}
else if(!isOperator(s[s.length-1]))
{
System.out.println("ERROR");
}
else
{
do
{
if(!isOperator(s[i]))
{
st.push(s[i]);
i++;
}
else
{
if("+".equals(s[i]))
{
num1 = Integer.parseInt(st.pop(), 16);
num2 = Integer.parseInt(st.pop(), 16);
result=num1+num2;
st.push(""+result);
}
else if("-".equals(s[i]))
{
num1 = Integer.parseInt(st.pop(), 16);
num2 = Integer.parseInt(st.pop(), 16);
result=num1-num2;
st.push(""+result);
}
else if("&".equals(s[i]))
{
num1 = Integer.parseInt(st.pop(), 16);
num2 = Integer.parseInt(st.pop(), 16);
result=num1&num2;
st.push(""+result);
}
else if("|".equals(s[i]))
{
num1 = Integer.parseInt(st.pop(), 16);
num2 = Integer.parseInt(st.pop(), 16);
result=num1|num2;
st.push(""+result);
}
else if("~".equals(s[i]))
{
num1 = Integer.parseInt(st.pop(), 16);
result=~num1;
st.push(""+result);
}
else if("X".equals(s[i]))
{
num1 = Integer.parseInt(st.pop(), 16);
num2 = Integer.parseInt(st.pop(), 16);
result=num1^num2;
st.push(""+result);
}
i++;
}
}
while(st.size()!=1);
result=Integer.parseInt(st.pop(),16);
System.out.println(result);
}
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
}
import java.io.*;
导入java.util.Stack;
/**
*
*@作者迪里尼
*/
公共类阿卡多克斯{
/**
*@param指定命令行参数
*/
公共静态布尔等运算符(字符串c)
{
返回(“+”.equals(c)| |“-”.equals(c)| |“&.equals(c)| |”|“~”。equals(c)| |“X”。equals(c));
}
/*公共字符串转换(字符串str)
{
char[]chars=str.toCharArray();
StringBuffer strBuffer=新的StringBuffer();
for(int i=0;i
请给我一个解决办法
谢谢你。问题在于你这样做的时候
st.push(""+result);
这段代码本质上是将整数转换为以10为基数的数字,然后将其转换为字符串。由于您的循环机制,当使用Integer.parseString(st.pop(),16)重新解析此结果时,它被错误地读取(当它是base-10整数时作为base-16整数)
将所有st.push()引用替换为以下内容,然后重试:
st.push(Integer.toString(result, 16));
您似乎在以十六进制读取输入,但以10进制(十进制)输出答案。。。