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
答案 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);
其余代码可以保持不变。