如何解决如何分别获取尾数和指数值
我看过类似的问题,但仍然没有找到我的问题的答案。我需要做的是,我有一个字符串数组:
private String[] scientificNumberData = "2e3,2e4,6e3".split(","); //[2e3,6e3]
我需要将尾数和指数分开才能返回 List<ScientificNumber>
。为此,我尝试创建 Map ,其中键表示尾数和值列表指数,因为我可能有重复的键并且无法以其他方式将它们分开。
从这段代码来看,我的地图看起来像这样:{2=[3,4,3],6=[3,3]}
,但应该是 2=[3,4],6=[3]}
。
是否有更好的解决方案,或者我可以以某种方式修复我的代码以获得用于 List<ScientificNumber>
的正确输出?
public List<ScientificNumber> getScientificNumbers() {
List<ScientificNumber> result = new LinkedList<>();
Map<Integer,List<Integer>> separateExponent = new LinkedHashMap<>();
List<Integer> exs = new LinkedList<>();
int mantissa = 0;
int exponent = 0;
for(String str: scientificNumberData){
for (int i = 0; i < str.length(); i++){
if(str.charAt(i) != 'e'){
if(matiss == 0){
if(!(separateExponent.containsKey(str.charAt(i)))){
mantissa = Integer.parseInt(String.valueOf(str.charAt(i)));
separateExponent.put(mantissa,exs);
}else{
mantissa = Integer.parseInt(String.valueOf(str.charAt(i)));
}
}else{
exponent = Integer.parseInt(String.valueOf(str.charAt(i)));
}
}
}
// if there is a duplicate key already
if(separateExponent.containsKey(mantissa)){
separateExponent.get(mantissa).add(exponent);
}else {
// if not duplicate key
separateExponent.put(mantissa,Collections.singletonList(exponent));
}
// change back to default values
mantissa = 0;
exponent = 0;
}
// works,but since wrong output the total will be wrong
for(Map.Entry<Integer,List<Integer>> entry : separateExponent.entrySet()){
for(int i = 0; i < entry.getValue().size(); i++){
result.add(new ScientificNumber(entry.getKey(),entry.getValue().get(i)));
}
}
return result;
}
ScientificNumber.java 文件如下所示:
public class ScientificNumber {
private int mantissa;
private int exponent;
public ScientificNumber(int mantissa,int exponent) {
this.mantissa = mantissa;
this.exponent = exponent;
}
public int intValue() {
return mantissa * Double.valueOf(Math.pow(10,exponent)).intValue();
}
}
解决方法
将以下方法添加到 ScientificNumber
类:
public static ScientificNumber parse(String str) {
int idx = str.indexOf('e');
if (idx == -1)
return new ScientificNumber(Integer.parseInt(str),0);
return new ScientificNumber(Integer.parseInt(str.substring(0,idx)),Integer.parseInt(str.substring(idx + 1)));
}
反之当然是:
@Override
public String toString() {
return this.mantissa + "e" + this.exponent;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。