分析java主参数[]数组错误
你好,我正在做一个简单的Java练习,希望有人能帮我 抱歉,如果这真的很简单,我是java新手 我遇到的问题是:如果用户输入的字符串不是“help”,例如“foo”,那么我会得到以下错误:分析java主参数[]数组错误,java,command-line,Java,Command Line,你好,我正在做一个简单的Java练习,希望有人能帮我 抱歉,如果这真的很简单,我是java新手 我遇到的问题是:如果用户输入的字符串不是“help”,例如“foo”,那么我会得到以下错误: Exception in thread "main" java.lang.NumberFormatException: For input string: "foo" at java.lang.NumberFormatException.forInputString(NumberFormatExceptio
Exception in thread "main" java.lang.NumberFormatException: For input string: "foo"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:447)
at java.lang.Integer.parseInt(Integer.java:497)
at NumberGuess.main(NumberGuess.java:10)
我认为正在发生的事情是:“foo”没有被“else”捕获,因为args[0]是一个对象引用,而不是真正的字符串
我想知道的是:如何捕捉除“帮助”或数字“1”到“5”以外的所有信息
这是代码
public class NumberGuess {
public static void main(String args[]){
int r;
int g;
if ((args[0].compareTo("help")) == 0){
System.out.println("Enter a number between 1-5 to play.");
} else if (Integer.parseInt(args[0]) > 0 && Integer.parseInt(args[0]) <= 5){
r = ((int)(Math.random()));
g = Integer.parseInt(args[0]);
if (r == g){
System.out.println("YOU WON!");
} else {
System.out.println("Wrong: number was " + r);
}
} else {
System.out.println("Something went horribly wrong.");
}}}
公共类编号guess{
公共静态void main(字符串参数[]){
INTR;
int g;
如果((参数[0]。比较(“帮助”))==0){
System.out.println(“输入1-5之间的数字以播放”);
}else if(Integer.parseInt(args[0])>0&&Integer.parseInt(args[0]))正如您所注意到的,parseInt
会在您试图解析一个不能正确表示错误的字符串时引发一个异常;try/catch
是用于捕获此类异常并处理它们的Java构造——在您最喜欢的Java文档中查找它!正如您所注意到的,parseInt
会在您需要时引发一个异常尝试解析一个不能正确表示错误的字符串;try/catch
是捕获此类异常并处理它们的Java构造——在您最喜欢的Java文档中查找它!在查找“帮助”后,它做的第一件事是尝试将其解析为一个数字:
g = Integer.parseInt(args[0]);
您可以尝试通过将该行更改为:
try {
g = Integer.parseInt(args[0]);
} catch(NumberFormatException e) {
System.out.println("The first parameter was supposed to be a number!");
System.exit(1);
}
如果要接受“foo 1”之类的参数,则应将args[1]解析为数字,并对args[0]进行测试,以确定其是否为如下所示的“foo”:
if(args[0].equalsIgnoreCase("foo")) {
// now we know foo is the first arg. Parse args[1]!
...
}
Random().nextInt(10) + 1; // (Thanks @mmyers)
哦,顺便说一下,大多数语言中的“随机”数是介于0和1之间的数字。它们通常看起来像“.108937190823…”
如果要检查1-10之类的数字,需要执行以下操作:
if(args[0].equalsIgnoreCase("foo")) {
// now we know foo is the first arg. Parse args[1]!
...
}
Random().nextInt(10) + 1; // (Thanks @mmyers)
(不完全确定这样做是否正确,但很接近。它在寻找“帮助”后做的第一件事是尝试将其解析为数字:
g = Integer.parseInt(args[0]);
您可以尝试通过将该行更改为:
try {
g = Integer.parseInt(args[0]);
} catch(NumberFormatException e) {
System.out.println("The first parameter was supposed to be a number!");
System.exit(1);
}
如果要接受“foo 1”之类的参数,则应将args[1]解析为数字,并对args[0]进行测试,以确定其是否为如下所示的“foo”:
if(args[0].equalsIgnoreCase("foo")) {
// now we know foo is the first arg. Parse args[1]!
...
}
Random().nextInt(10) + 1; // (Thanks @mmyers)
哦,顺便说一下,大多数语言中的“随机”数是介于0和1之间的数字。它们通常看起来像“.108937190823…”
如果要检查1-10之类的数字,需要执行以下操作:
if(args[0].equalsIgnoreCase("foo")) {
// now we know foo is the first arg. Parse args[1]!
...
}
Random().nextInt(10) + 1; // (Thanks @mmyers)
(不完全确定这样做是否正确,但很接近。程序逻辑本质上是“如果参数0不是“帮助”,请将其解析为整数…”此时,会抛出异常,因为“foo”不是有效整数
最简单的方法是捕获NumberFormatException
并打印一条更有用的消息
if ("help".equals(args[0])) {
System.out.println("Enter a number between 1 and 5 to play.");
}
else {
int number;
try {
number = Integer.parseInt(args[0]);
}
catch (NumberFormatException ex) {
System.out.println("Input is not an integer: " + args[0]);
return;
}
if ((number < 1) || (number > 5)) {
System.out.println("Number out of bounds: " + number);
return;
}
int r = new java.util.Random().nextInt(5) + 1;
if (number == r)
System.out.println("You won!");
else
System.out.println("You lost!");
}
if(“help”.equals(args[0])){
System.out.println(“输入一个介于1和5之间的数字来播放”);
}
否则{
整数;
试一试{
number=Integer.parseInt(args[0]);
}
捕获(NumberFormatException ex){
System.out.println(“输入不是整数:“+args[0]);
返回;
}
如果((数字<1)| |(数字>5)){
System.out.println(“超出范围的编号:+Number”);
返回;
}
int r=newjava.util.Random().nextInt(5)+1;
如果(数字==r)
System.out.println(“你赢了!”);
其他的
System.out.println(“你输了!”);
}
程序逻辑本质上是“如果参数0不是“帮助”,则将其解析为整数…”此时,会引发异常,因为“foo”不是有效的整数
最简单的方法是捕获NumberFormatException
并打印一条更有用的消息
if ("help".equals(args[0])) {
System.out.println("Enter a number between 1 and 5 to play.");
}
else {
int number;
try {
number = Integer.parseInt(args[0]);
}
catch (NumberFormatException ex) {
System.out.println("Input is not an integer: " + args[0]);
return;
}
if ((number < 1) || (number > 5)) {
System.out.println("Number out of bounds: " + number);
return;
}
int r = new java.util.Random().nextInt(5) + 1;
if (number == r)
System.out.println("You won!");
else
System.out.println("You lost!");
}
if(“help”.equals(args[0])){
System.out.println(“输入一个介于1和5之间的数字来播放”);
}
否则{
整数;
试一试{
number=Integer.parseInt(args[0]);
}
捕获(NumberFormatException ex){
System.out.println(“输入不是整数:“+args[0]);
返回;
}
如果((数字<1)| |(数字>5)){
System.out.println(“超出范围的编号:+Number”);
返回;
}
int r=newjava.util.Random().nextInt(5)+1;
如果(数字==r)
System.out.println(“你赢了!”);
其他的
System.out.println(“你输了!”);
}
这里发生的事情是,代码进入else块(正如您猜测的那样),else块立即尝试将参数转换为数字(Integer.parseInt(args[0])。因此,您可以添加一个try-catch块来处理此类情况:
公共类编号{
公共静态void main(字符串参数[]){
INTR;
int g;
内部温度;
如果((参数[0]。比较(“帮助”))==0){
System.out.println(“输入1-5之间的数字以播放”);
}否则{
试一试{
temp=Integer.parseInt(args[0]);
}捕获(数字格式){
System.out.println(“请输入一个数字”);
系统退出(-1);
}
如果(Integer.parseInt(args[0])>0&&Integer.parseInt(args[0])这里发生的事情是代码进入else块(如您所猜测的),else块立即尝试将参数转换为数字(Integer.parseInt(args[0])。因此,您可以添加一个try-catch块来处理此类场景:
公共类编号{
公共静态void main(字符串参数[]){
INTR;
int g;
内部温度;
如果((参数[0]。比较(“帮助”))==0){
System.out.println(“输入1-5之间的数字以播放”);
}否则{
试一试{
temp=Integer.parseInt(args[0]);
}捕获(数字格式){
System.out.println(“请输入一个数字”);
系统退出(-1);
}
如果(Integer.parseInt(args[0])>0&&Integer.parseInt(args[0]),实际上,它是Java中的try/catch