gpt4 book ai didi

java - 计算十六进制数时出现错误

转载 作者:行者123 更新时间:2023-12-01 04:14:15 25 4
gpt4 key购买 nike

当我计算 (1 3 +) 时,我得到了正确的答案。但是当我计算 (A 1 +) 这样的语句时,我得到了错误的答案。

在这个问题中,我尝试评估十六进制语句,例如 (5 7 + 7 * 8 + ~)。

这是代码。

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());
}
}
}

请给我一个解决方案。

谢谢。

最佳答案

问题出在你这样做的时候

st.push(""+result);

此代码本质上是将整数转换为以 10 为基数的数字,然后将其转换为字符串。由于循环机制的原因,当这个结果被 Integer.parseString(st.pop(), 16) 重新解析时,它会被错误地读取(当它是一个基数 10 的整数时,它会被读取为一个基数 16 的整数)。

用此替换所有 st.push() 引用,然后重试:

st.push(Integer.toString(result, 16));

关于java - 计算十六进制数时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19602932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com