Java 排序大十进制

Java 排序大十进制,java,arrays,sorting,java-7,bigdecimal,Java,Arrays,Sorting,Java 7,Bigdecimal,这个大小数排序有什么问题?代码将数字作为字符串输入,然后将其转换为BigDecimal,然后对排序后的BigDecimal进行排序和打印 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(); Strin

这个大小数排序有什么问题?代码将数字作为字符串输入,然后将其转换为BigDecimal,然后对排序后的BigDecimal进行排序和打印

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]);
    }
}
}
import java.math.BigDecimal;
导入java.util.*;
类解决方案{
公共静态void main(字符串[]argh){
扫描仪sc=新的扫描仪(System.in);
int n=sc.nextInt();
字符串[]s=新字符串[n];
BigDecimal a[]=null;
对于(int i=0;ifor(int i=0;i看起来您正在抛出一个NPE,因为您试图访问一个空数组

    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
    }
编辑

对于Mariano的回答,您的

    if (a[i].compareTo(a[j]) == -1)
是正确的,请参阅

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


看起来您抛出NPE是因为您试图访问空数组

    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
    }
编辑

对于Mariano的回答,您的

    if (a[i].compareTo(a[j]) == -1)
是正确的,请参阅

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


您的代码中有几个错误

首先,如果不初始化数组,
BigDecimal a[]=null
应替换为
BigDecimal a[]=new BigDecimal[n]
,以避免NullPointerException

最后,如果实现的排序算法错误,则应将(int j=1;j替换为(int j=i+1;j

以下是您的代码的外观:

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

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

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

        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 = i + 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]);
        }
    }
}
import java.math.BigDecimal;
导入java.util.Scanner;
公共类解决方案{
公共静态void main(最终字符串[]argh){
扫描仪sc=新的扫描仪(System.in);
int n=sc.nextInt();
字符串[]s=新字符串[n];
BigDecimal a[]=新的BigDecimal[n];
对于(int i=0;i
您的代码中有几个错误

首先,如果不初始化数组,
BigDecimal a[]=null
应替换为
BigDecimal a[]=new BigDecimal[n]
,以避免NullPointerException

最后,如果实现的排序算法错误,则应将(int j=1;j替换为(int j=i+1;j

以下是您的代码的外观:

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

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

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

        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 = i + 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]);
        }
    }
}
import java.math.BigDecimal;
导入java.util.Scanner;
公共类解决方案{
公共静态void main(最终字符串[]argh){
扫描仪sc=新的扫描仪(System.in);
int n=sc.nextInt();
字符串[]s=新字符串[n];
BigDecimal a[]=新的BigDecimal[n];
对于(int i=0;i
导入java.math.BigDecimal;
导入java.util.*;
类解决方案{
公共静态void main(字符串[]argh)
{
扫描仪sc=新的扫描仪(System.in);
int n=sc.nextInt();
字符串[]s=新字符串[n+2];
对于(inti=0;i
import java.math.BigDecimal;
导入java.util.*;
类解决方案{
公共静态void main(字符串[]argh)
{
扫描仪sc=新的扫描仪(System.in);
int n=sc.nextInt();
字符串[]s=新字符串[n+2];

对于(inti=0;i,可以使用比较器对BigDecimal进行排序

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]);
    }
}
import java.math.BigDecimal;
导入java.util.*;
类解决方案{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int n=sc.nextInt();
字符串[]s=新字符串[n+2];

对于(inti=0;i,可以使用比较器对BigDecimal进行排序

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]);
    }
}
import java.math.BigDecimal;
导入java.util.*;
类解决方案{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int n=sc.nextInt();
字符串[]s=新字符串[n+2];

对于(int i=0;i您的错误是什么?您预期的输入/输出?请提及您的问题或预期的i/O在本网站上工作的方法是,您解释问题是什么,然后人们可以尝试帮助您。如果您不知道是否存在问题或问题是什么,您应该在本网站上发布问题之前先找出问题所在。这里真正的问题是什么?您是否面临任何错误(如果是,请也粘贴堆栈跟踪)这是思考问题是0.12和.12在使用BigDeCimple初始化这些数字时,它考虑了0.12。你的错误是什么?你的预期输入/输出?请提一下你的问题或预期的I/O在这个站点上工作的方法是你解释问题是什么,然后人们可以尝试帮助你。如果你不知道是否存在。问题或问题是什么,你应该先弄清楚,然后再在这个网站上发布一个问题。