Java:使用Math.abs,并记录它被用于以后使用的频率

Java:使用Math.abs,并记录它被用于以后使用的频率,java,math,count,negative-number,false-positive,Java,Math,Count,Negative Number,False Positive,我正在尝试编写一个修改分数的程序,我需要确保“-”负数只正确输出一次。如果用户输入一个分子和一个分母,并将它们都作为负数输入,我不能显示-1/-2。同样,只有一个负片,我不能显示1/-2。我提出的解决方案是使用Math.abs删除num和den中的负片,然后在输出过程中添加负片,如果Math.abs只需使用一次。如果它被使用了两次,我将包括逻辑,只输出num和den,并删除负数我如何记录Math.abs的使用频率,并防止用户在输入num或den或两者的正数时出现误报。 我的代码目前只做转换成绝对

我正在尝试编写一个修改分数的程序,我需要确保“-”负数只正确输出一次。如果用户输入一个分子和一个分母,并将它们都作为负数输入,我不能显示-1/-2。同样,只有一个负片,我不能显示1/-2。我提出的解决方案是使用Math.abs删除num和den中的负片,然后在输出过程中添加负片,如果Math.abs只需使用一次。如果它被使用了两次,我将包括逻辑,只输出num和den,并删除负数我如何记录Math.abs的使用频率,并防止用户在输入num或den或两者的正数时出现误报。

我的代码目前只做转换成绝对值的工作,所以我没有什么可以显示的来保持计数

snum = Math.abs(num);
*其中num是用户输入的编号,snum是abs转换后的编号

任何帮助都将不胜感激

谢谢,
INGUES

否,保留内部表示中的减号不变,只有输出损坏。以下是我的解决方案:

String sign = (num * denom < 0)? "-" : "";
System.out.println(sign + Math.abs(num) + "/" + Math.abs(denom));
字符串符号=(num*denom<0)?"-" : "";
System.out.println(sign+Math.abs(num)+“/”+Math.abs(denom));

否,保留内部表示中的减号不变,只有输出损坏。以下是我的解决方案:

String sign = (num * denom < 0)? "-" : "";
System.out.println(sign + Math.abs(num) + "/" + Math.abs(denom));
字符串符号=(num*denom<0)?"-" : "";
System.out.println(sign+Math.abs(num)+“/”+Math.abs(denom));
伪代码:

if numerator < 0 and denominator < 0 then
   numerator = -numerator
   denominator = -denominator
   sign = '+'
elsif numerator < 0 then
   numerator = -numerator
   sign = '-'
elsif denominator < 0 then
   denominator = -denominator
   sign = '-'
end if

print sign, numerator, '/', denominator
如果分子<0,分母<0,则
分子=-分子
分母=-分母
符号='+'
如果分子小于0,则
分子=-分子
符号='-'
如果分母小于0,则
分母=-分母
符号='-'
如果结束
打印符号,分子“/”,分母
伪代码:

if numerator < 0 and denominator < 0 then
   numerator = -numerator
   denominator = -denominator
   sign = '+'
elsif numerator < 0 then
   numerator = -numerator
   sign = '-'
elsif denominator < 0 then
   denominator = -denominator
   sign = '-'
end if

print sign, numerator, '/', denominator
如果分子<0,分母<0,则
分子=-分子
分母=-分母
符号='+'
如果分子小于0,则
分子=-分子
符号='-'
如果分母小于0,则
分母=-分母
符号='-'
如果结束
打印符号,分子“/”,分母

如果分母是负数,只需翻转两者的符号。

如果分母是负数,只需翻转两者的符号。

这是家庭作业吗?如果是,请标记:。这是家庭作业吗?如果是,请标记:。如果denom为,则您的解决方案可以创建DivideByZero异常0@EricB. - 我恢复到以前使用乘法的版本。我假设OP在前面的某个地方检查
denom
。当然,现在有一个相反的问题(虽然不太可能),即可以超出max int或max long的界限。尽管如此,快速测试表明它不会生成错误-Long.MAX_值^2=1。然而,我不知道结果符号是否仍然一定是准确的。我同意最好的选择是检查
denom!=0
prior。问题是
32768*65536<0
最好做两次符号检查<代码>(数值>=0)=(密度>=0)?“”:“-”如果denom为0@EricB. - 我恢复到以前使用乘法的版本。我假设OP在前面的某个地方检查
denom
。当然,现在有一个相反的问题(虽然不太可能),即可以超出max int或max long的界限。尽管如此,快速测试表明它不会生成错误-Long.MAX_值^2=1。然而,我不知道结果符号是否仍然一定是准确的。我同意最好的选择是检查
denom!=0
prior。问题是
32768*65536<0
最好做两次符号检查<代码>(数值>=0)=(密度>=0)?“”:“-”快速、简单、简洁的解决方案。我认为是最好的。快速、简单、简洁的解决方案。我认为是最好的。