首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序BigDecimal

排序BigDecimal
EN

Stack Overflow用户
提问于 2016-01-01 14:10:58
回答 3查看 9.1K关注 0票数 1

这个BigDecimalSorting有什么问题?代码接受数字作为字符串,然后将其转换为BigDecimal,然后对排序后的BigDecimals进行排序和打印。

代码语言:javascript
复制
import java.math.BigDecimal;
import java.util.*;

class Solution {
public static void main(String []argh){

    Scanner sc= new Scanner(System.in);
    int n=sc.nextInt();
    String []s=new String[n];
    BigDecimal a[] = null;

    for(int i = 0; i < n ; i++){
        s[i]=sc.next();
        a[i] = new BigDecimal(s[i]);
    }
    for(int i = 0; i < n-1; i++){
        for(int j = 1; j < n; j++){
            if(a[i].compareTo(a[j]) == -1){
                BigDecimal temp = a[j];
                a[j] = a[i];
                a[i] = temp;
            }
        }
    }
    //Output
    for(int i=0;i<n;i++){
        s[i] = a[i].toString();
        System.out.println(s[i]);
    }
}
}

输入示例:9 -100 50 056.6 90 0.12 .12 02.34 000.000

预期输出: 90 56.6 50 02.34 0.12 .12 0 000.000 -100

EN

回答 3

Stack Overflow用户

发布于 2016-05-02 06:27:19

代码语言:javascript
复制
import java.math.BigDecimal;
import java.util.*;
class Solution{

    public static void main(String []argh)
    {
        Scanner sc= new Scanner(System.in);
        int n=sc.nextInt();
        String []s=new String[n+2];
        for(int i=0;i<n;i++)
        {
            s[i]=sc.next();
        }

        for(int i=0;i<n;i++)
        {
            BigDecimal max=new BigDecimal(s[i]);
            int idx=i;
            for(int j=i+1;j<n;j++)
            {
                BigDecimal curr=new BigDecimal(s[j]);
                if(curr.compareTo(max)==1)
                {
                    max=curr;
                    idx=j;
                }
            }
            String temp=s[i];
            s[i]=s[idx];
            s[idx]=temp;
        }

        for(int i=0;i<n;i++)
        {
            System.out.println(s[i]);
        }

    }


}
票数 5
EN

Stack Overflow用户

发布于 2019-01-10 14:05:44

可以使用比较器对BigDecimal进行排序

代码语言:javascript
复制
import java.math.BigDecimal;
import java.util.*;

class Solution{

public static void main(String []args){
    Scanner sc= new Scanner(System.in);
    int n=sc.nextInt();
    String []s=new String[n+2];
    for(int i=0;i<n;i++){
        s[i]=sc.next();
    }
    sc.close();

    Arrays.sort(s, 0, n, new Comparator<Object>() {
        public int compare(Object a1, Object a2) {
            BigDecimal bigDec1 = new BigDecimal((String) a1);
            BigDecimal bigDec2 = new BigDecimal((String) a2);
            return bigDec2.compareTo(bigDec1);
        }
    });


    //Output
    for(int i=0;i<n;i++)
    {
        System.out.println(s[i]);
    }
}
票数 5
EN

Stack Overflow用户

发布于 2016-01-01 14:24:58

看起来你抛出了一个NPE,因为你试图访问一个空数组。

代码语言:javascript
复制
    BigDecimal a[] = null;  // <---- null array

    for (int i = 0; i < n; i++) {
        s[i] = sc.next();
        a[i] = new BigDecimal(s[i]); // <---- accessing null array a
    }

尝试使用输入上使用的n长度初始化数组

代码语言:javascript
复制
    BigDecimal a[] = new BigDecimal[n];

编辑

为了回应Mariano的回答,你的

代码语言:javascript
复制
    if (a[i].compareTo(a[j]) == -1)

是正确的,就像现在一样。请参阅BigDecimal javadoc

返回:-1、0或1,因为此BigDecimal在数值上小于、等于或大于val。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34553984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档