Java最大数字(Java.lang.NumberFormatException)

Java最大数字(Java.lang.NumberFormatException),java,Java,我试着写一段代码,在其中输入一个数字,然后在这个数字中找到最大的数字。(例如,12345为5,791为9)。但是,当我在main()中放入scanner方法时,我得到一个错误java.lang.NumberFormatException,不知道该怎么办 import java.util.Scanner; public class Step2 { private static int greatestnum = 0; private static int length = 0;

我试着写一段代码,在其中输入一个数字,然后在这个数字中找到最大的数字。(例如,12345为5,791为9)。但是,当我在main()中放入scanner方法时,我得到一个错误
java.lang.NumberFormatException
,不知道该怎么办

import java.util.Scanner;

public class Step2 {

    private static int greatestnum = 0;
    private static int length = 0;
    private static int step = 0;

    public static void main(String[] args){
        Scanner r = new Scanner(args[0]);
        String s = r.next();
        int t = Integer.parseInt(s);
        System.out.println(maxDigit(t));    
    }               

    public static int maxDigit(int num){
        num = Math.abs(num);
        String stringint = String.valueOf(num);
        length = stringint.length();
        String[] ary = stringint.split("");
        while ( step < length){
        int currentnum = Integer.parseInt(ary[step]);
            if(currentnum >= greatestnum){
                greatestnum = currentnum;
            }
            step++;
        }
        return greatestnum;
    }

}
import java.util.Scanner;
公共类Step2{
私有静态int greatestnum=0;
私有静态整数长度=0;
私有静态int步长=0;
公共静态void main(字符串[]args){
扫描仪r=新扫描仪(args[0]);
字符串s=r.next();
int t=Integer.parseInt(s);
System.out.println(maxDigit(t));
}               
公共静态int maxDigit(int num){
num=Math.abs(num);
String stringint=String.valueOf(num);
length=stringint.length();
String[]ari=stringint.split(“”);
while(步长<长度){
int currentnum=Integer.parseInt(ari[step]);
如果(currentnum>=greatestnum){
greatestnum=currentnum;
}
step++;
}
返回最大数量;
}
}

我真的需要一些帮助,我必须递归地做同样的事情,不知道我做错了什么。

Integer.parseInt如果不能将字符串转换为整数,就会抛出NumberFormatException。在您的情况下,我将检查输入值,即s

JavaDoc for

例子

Integer.parseInt(" 234"); ---> Throws NumberFormatException as it has space
Integer.parseInt(""); ---> Throws NumberFormatException as it is not parseable for an integer
Integer.parseInt(null); ---> Throws NumberFormatException and not npe
Integer.parseInt(" 234 ".trim()); ---> Doesnt throw NumberFormatException as it trims before trying to parse it.
我会试试看

int t = Integer.parseInt(s.trim());
这将清除您的NumberFormatException

至于你问题的另一部分,这是一个非常糟糕的努力。 请阅读java文档中的拆分字符串。stringint.split(“”);你在用什么来劈线

您应该使用模运算符。那是%。 用法5%2将返回剩余的1

如果你在循环中做这样的事情

public static int maxDigit(int num){
    int maxDigit=0;
    while(num>0) {
       if(maxDigit<num%10){
           maxDigit=num%10;
       }
       num/=10;
    }
    return maxDigit;
}
publicstaticintmaxdigit(intnum){
int maxDigit=0;
while(num>0){
如果(maxDigit),请尝试以下操作:

private static int greatestnum = '0';

public static void main(String[] args){
    Scanner r = new Scanner(args[0]);
    String s = r.next().trim();
    char c[] = s.toCharArray();
    for ( int i = 0 ; i < c.length ; i++ ) {
        if ( c[i] > greatestnum ) {
            greatestnum = c[i];
        }
    }
    System.out.println(greatestnum-48);
}
private static int greatestnum='0';
公共静态void main(字符串[]args){
扫描仪r=新扫描仪(args[0]);
字符串s=r.next().trim();
char c[]=s.toCharArray();
for(int i=0;igreatestnum){
greatestnum=c[i];
}
}
System.out.println(greatestnum-48);
}
说明

  • 字符串是一个字符序列
  • 每个字符都有一个代码('0',…,'9'按此顺序存储=>'0'<'9')
  • 如果你想找回这个号码,你需要从这个字符代码中删除48

下面的代码可以获取输入,不管输入是什么,只检查数字

    Scanner r = new Scanner(args[0]);

    char max = '0';

    // for all tokens in input string
    while (r.hasNext()) {

        // next token (whatever it is)
        String token = r.next();

        // iterate thru all chars in this token
        for (int i = 0; i < token.length(); i++) {
            char c = token.charAt(i);
            if (Character.isDigit(c) && c > max) {
                max = c;
            }
        }
    }

    // print max found digit
    System.out.println(max);

s的值是多少?你能做System.out.println(“s是:+s”)吗?所以,我在eclipse上运行它,我在这个类的run-as属性下,把参数放在参数部分“12345”下因此,我的扫描仪将获取该值并将其放入s中,然后将s转换为存储在t中的整数12345,然后获取t并将其插入maxDigit中并打印出来。使用trim后,您仍然会得到NumberFormatException?是的,如果有帮助,则唯一的错误现在出现在下面的代码行中int currentnum=integer.parseInt(ary[step])这是一个超级复杂的简单逻辑决不是一个错误的答案,但它太复杂了。OP是初学者,您可能想添加为什么是-48以及对ASCII值的简要描述。而不仅仅是“如果您想返回数字,您需要从该字符代码中删除48”
input: 2348343
output: 8

input: a brown fox 145 jump 71 over
output: 7