Java-Error尝试对int进行排序

时间:2016-10-24 19:01:14

标签: java

package programame;

import java.util.Scanner;
import java.util.Arrays;

public class E100 {
public static int ascendente(int a) 
{
    String str = Integer.toString(a);
    String max[] = str.split("");
    Arrays.sort(max);
    String str1 = Arrays.toString(max);
    int ascendente = Integer.parseInt(str1);
    return ascendente;
}
public static void main(String args[]) {
    Scanner sc = new Scanner(System.in);
    int intentos = sc.nextInt();
    int x = sc.nextInt();
    System.out.println(ascendente(x));
    }
}

嗨,我正在尝试对扫描仪中的int读取进行排序,但每次运行它都会给出错误=

 Exception in thread "main" java.lang.NumberFormatException: For input string: "[3, 4, 6, 7]"   at
 java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)   at java.lang.Integer.parseInt(Integer.java:580)     at
 java.lang.Integer.parseInt(Integer.java:615)    at
 programame.E100.ascendente(E100.java:18)    at
 programame.E100.main(E100.java:25)

 C:\Users\agn12\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1

3 个答案:

答案 0 :(得分:1)

例外

%{
#include <stdio.h>
#include "executor/CmdArg.h"
#include "executor/Command.h"
#include "print.h"
int yyerror(const char *msg) {
    return fprintf(stderr, "YACC: %s\n", msg);
}
%}

%union {
    int number;
    char *string;
};
%token<string> WORD
%token<string> OPTION
%destructor {
free($$);
} <string>
%token<void> SEMICOLON
%token OR AND PIPE AMPERSAND GREAT GREAT_GREAT LESS ERR_GREAT ERR_GREAT_GREAT GREAT_AMP GREAT_GREAT_AMP
%error-verbose
%%

pipeline: cmd_args
background SEMICOLON
pipeline{
end_cmd(SEQUENCING_SEQUENCING);
}
|
cmd_args background
PIPE pipeline{
        end_cmd(SEQUENCING_PIPE);
}
|
cmd_args background
OR pipeline{
        end_cmd(SEQUENCING_OR);
}
|
cmd_args background
AND pipeline{
        end_cmd(SEQUENCING_AND);
}
|
cmd_args background{
        end_cmd(SEQUENCING_NOTHING);
}
|;
cmd_args: WORD list_args params io_list{
        printdebug("YACC COMMMAND : %s\n", $1);
    add_arg($1);
};

list_args: OPTION list_args{
printdebug ("yacc list arg plusieurs: %s\n", $1);
add_arg($1);
}|OPTION{
printdebug ("yacc list arg seul : %s\n", $1);
add_arg($1);
}|;

params: WORD params{
printdebug ("yacc param plusieurs : %s\n", $1);
    add_arg($1);
}
|WORD {
printdebug ("yacc param seul: %s\n", $1);
    add_arg($1);
}|;
background: AMPERSAND{
        set_background();
}
|;

io_list: GREAT WORD{
    set_io(GREAT,$2);
}|GREAT_GREAT WORD{
    set_io(GREAT_GREAT,$2);
} LESS WORD{
    set_io(LESS,$2);
}| ERR_GREAT WORD{
    set_io(ERR_GREAT,$2);
}| ERR_GREAT_GREAT WORD{
    set_io(ERR_GREAT_GREAT,$2);
}| GREAT_AMP WORD{
    set_io(GREAT_AMP,$2);
}| GREAT_GREAT_AMP WORD{
    set_io(GREAT_GREAT_AMP,$2);
}|;


%%

struct CmdArg *temp;
void set_io(enum yytokentype tokentype, char* file){

}
void set_background() {
    temp->_background = 1;
}
void add_arg(char* s){
    if (!temp)temp = new_cmdArg();
    cmdarg_add_argument(temp,s);
    free(s);
}
void end_cmd(Sequencing seq){
    temp->_seq=seq;
    command_add_cmdArg(temp, seq);
    free_cmdArg(temp);
    temp = NULL;
}

表示Java无法在您请求时将此类字符串转换为Int。 能够读取编译器错误是有用的:

  

programame.E100.ascendente(E100.java:18)

     

programame.E100.main(E100.java:25)

它告诉你问题出现在E100.java的方法main的第25行,它反过来调用方法ascendente,问题是在第18行,你尝试将int转换为字符串数组。

答案 1 :(得分:0)

错误在于此行

String str1 = Arrays.toString(max);

您正尝试将数组转换为字符串 max = [2]

所以str1 =&#34; [2]&#34;

然后将其转换为数字

int ascendente = Integer.parseInt(str1);

发出错误:: java.lang.NumberFormatException

答案 2 :(得分:0)

您正在尝试将数字3467拆分为其组成十进制数字,对它们进行排序,并将数字重新构造为单个字符串:

String max[] = str.split("");
Arrays.sort(max);
String str1 = Arrays.toString(max);

问题在于Arrays.toString返回数组的人类可读表示形式,其形式为“#3,4; [6,4,7]&#34;”。显然,这不能解析为int。你期望获得字符串&#34; 3467&#34;。

更好的方法(在运行时效率和编码简易性方面)是将字符串拆分为单个字符,而不是单字符字符串。然后你可以对它们进行排序,并使用String的构造函数之一轻松地将它们转换回字符串:

char[] max = str.toCharArray();
Arrays.sort(max);
String str1 = new String(max);

其余代码可以保持不变。