当前位置: 首页 > 知识库问答 >
问题:

将字符串值转换为BigDecimal并按降序排序,然后打印它们

司徒瀚
2023-03-14

这是我的代码,但它并不像在BigDecimal变量中那样接受字符串

import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Scanner;

public class BigDesimal {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        String[] s = new String[n];
        for(int i=0; i<n; ++i) {
            s[i] = in.next();
        }
        in.close();

        BigDecimal max, min;
        for(int i=0; i<n-1; i++) {
            for(int j=i+1; j<n; j++) {
                max = (new BigDecimal(s[i])).max(new BigDecimal(s[j]));
                min = (new BigDecimal(s[i])).min(new BigDecimal(s[j]));
                s[i] = max.toString();
                s[j] = min.toString();
                 
                
            }
        }
         

        System.out.println(Arrays.toString(s));

    }

}

我为以下输入运行此程序:*9

-100, 50, 0, 56.6, 90, 0.12, .12, 02.34, 000.000*

并且输出为:[90, 56.6, 50, 2.34, 0.12, 0.12, 0, 0, -100]

共有2个答案

金令秋
2023-03-14

尝试类似的方法(未经测试):

        List<String> sortedNumberStrings = Arrays.stream(numberStrings)
                .map(NumberString::new)
                .sorted(Comparator.reverseOrder())
                .map(NumberString::getStringValue)
                .collect(Collectors.toList());

        System.out.println(sortedNumberStrings);



private static class NumberString implements Comparable<NumberString> {

        private final String stringValue;
        private final BigDecimal bigDecimalValue;

        NumberString(String stringValue) {

            this.stringValue = stringValue;
            this.bigDecimalValue = new BigDecimal(stringValue);
        }

        public String getStringValue() {
            return stringValue;
        }

        public BigDecimal getBigDecimalValue() {
            return bigDecimalValue;
        }

        private static final Comparator<NumberString> NATURAL_ORDER_COMPARATOR =
                Comparator.comparing(NumberString::getBigDecimalValue) // sort by value
                        .thenComparing(NumberString::getStringValue); // sort lexically

        @Override
        public int compareTo(NumberString other) {
            return NATURAL_ORDER_COMPARATOR.compare(this, other);
        }

        @Override
        public int hashCode() {
            return Objects.hash(stringValue, bigDecimalValue);
        }

        @Override
        public boolean equals(Object o) {
            if (this == o) {
                return true;
            }
            if (!(o instanceof NumberString)) {
                return false;
            }
            NumberString that = (NumberString) o;
            return Objects.equals(stringValue, that.stringValue) &&
                    Objects.equals(bigDecimalValue, that.bigDecimalValue);
        }

        @Override
        public String toString() {
            return stringValue;
        }
    }
燕富
2023-03-14

您可以将内部循环体更改为:

String si = s[i], sj = s[j];
if (new BigDecimal(si).compareTo(new BigDecimal(sj)) < 0) {
    s[i] = sj;
    s[j] = si;
}

您不需要将转换后的大小数的结果存储回数组,但仅用于比较。

对于输入:

9, -100, 50, 0, 56.6, 90, 0.12, .12, 02.34, 000.000

我回来了:

90, 56.6, 50, 9, 02.34, .12, 0.12, 0, 000.000, -100

如果您不处理大量的大数字,正常的doubles就足够了:

if(Double.parseDouble(si) < Double.parseDouble(sj))
 类似资料:
  • 我正在使用Schembuf在带有套接字的计算机之间更改数据。要传输数据,我使用以下内容: 然而,我注意到Protobuf无法读取任何非int类型的接收数据(它将其分配给0)。果不其然,如果我不使用套接字,但试图用相同的代码片段返回消息,则会发生相同的情况: 我还指出: 那么,为什么我不能正确地将数据转换回字符串呢?如果这是一个参考问题,为什么protobuf不能读取字符数组数据或从字符数组转换的字

  • 问题内容: 我有一个BigDecimal对象,我想将其转换为字符串。问题是我的值得到了分数,我得到了一个很大的数字(长度),例如,我只需要字符串中的原始数字即可: 输出为: 我需要把输出准确地放在字符串中 问题答案: 要获得准确的结果,您需要使用String构造函数或(它基于double的规范表示构造一个BigDecimal): 问题在于参数是a ,并且恰巧双精度不能正确表示。因此,“转换”为最接

  • 我有一个HashMap与作为关键和一个值作为价值。 我的目标是通过降序值对Hashmap进行排序。应在

  • 问题内容: 在我的GWT Web应用程序中,我有一个保存价格的文本框。如何将String转换为BigDecimal? 问题答案: 最简单的方法是创建一个继承ValueBox的新文本框小部件。如果您采用这种方式,则无需手动转换任何字符串值。ValueBox会处理所有这一切。 要输入BigDecimal值,您可以执行以下操作: 您的 BigDecimalBox.java : 然后你的 BigDecim

  • (“Samsung”,(“Galaxy”,20)) (“苹果”,(“iPhone”,40)) 我需要按照内部键的字母顺序对映射进行降序排序(在这个例子中是模型名) 我到目前为止的排序是这样的: Map.EntrySet().Stream.Foreach(entry->entry.GetValue().EntrySet().Stream().Sorted(Comparator.Comparative

  • 问题内容: 我想在同一行上打印列表中的项目。我尝试过的代码: 输出= 我想输出到= 此代码仍在新行上打印我的模具的ASCII艺术表示。我想将其打印在同一行上,以节省空间并在一个屏幕上显示每个玩家的状态。 问题答案: 由于的元素是多行字符串,因此要比这更难。 首先,从每个字符串的开头删除换行符,并确保ASCII图形中的所有行都具有相同的长度。 然后尝试以下 如果您将描述的更改应用于ASCII艺术作品