Java 排序大十进制
这个大小数排序有什么问题?代码将数字作为字符串输入,然后将其转换为BigDecimal,然后对排序后的BigDecimal进行排序和打印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
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;i for(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;iimport 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在这个站点上工作的方法是你解释问题是什么,然后人们可以尝试帮助你。如果你不知道是否存在。问题或问题是什么,你应该先弄清楚,然后再在这个网站上发布一个问题。