我正在尝试提示用户输入以在Comparable ArrayList中存储整数,双精度或字符串。问题是,我不要求他们让程序知道它是什么。我的解决方案是解析整数或双精度的输入。如果它们都返回false,那么我知道它是一个字符串。这是我的代码:
int choice2num = 0;
System.out.println("Please enter your values: (Press enter to stop) ");
int integer = 0;
double doubl = 0;
boolean hasInt = true;
boolean hasDouble = true;
do
{
try
{
tempChoice = userIn2.nextLine();
if (hasInt){
try{
integer = Integer.parseInt(tempChoice);
}catch (NumberFormatException e)
{
hasInt = false;
}
}
if (haveInt == false && hasDouble){
try {
doubl = Double.parseDouble(tempChoice);
}catch (NumberFormatException er)
{
hasDouble = false;
}
}
if (hasInt)
{
try{
integer = Integer.parseInt(tempChoice);
}catch (NumberFormatException e )
{
System.out.println("Wrong format, please try again.");
break;
}
list.add(integer);
}
if (hasDouble)
{
try {
doubl = Double.parseDouble(tempChoice);
}catch (NumberFormatException e)
{
System.out.println("Wrong format, please try again.");
break;
}
list.add(doubl);
}
if (!hasDouble && !hasInt)
{
list.add(tempChoice);
}
if (!tempChoice.equals(""))
{
choice2num = Integer.parseInt(tempChoice);
list.add(choice2num);
}
}
catch(NumberFormatException e)
{
System.out.println(e.getMessage());
}
} while (!tempChoice.equals(""));
System.out.println("List: " + list);
secondMenu();
}
我知道这很混乱。当我在程序中运行代码,并输入整数1,2,3,4和5时,它返回:
Wrong format, please try again.
List: [1, 1.0, 1, 2, 2.0, 2, 3, 3.0, 3, 4, 4.0, 4, 5, 5.0, 5]
我的错误是什么?
答案 0 :(得分:3)
您需要if else
阻止。
if (userIn2.hasNextInt()){
// process integer
obj = userIn2.nextInt();
} else if(userIn2.hasNextDouble()) {
// process double
obj = userIn2.nextDouble();
} else {
// process String
obj = userIn2.next();
}
使用此顺序首先获取整数,然后加倍并最后获得字符串。
答案 1 :(得分:0)
首先,如果您的输入是int,则hasInt
和hasDouble
都将为真。在这种情况下,两个块都将运行,并且相同的数字将作为int和double添加。 (你也没有在任何地方重置它们。如果你输入的东西不是int,那么之后就不再添加整数了。)
不仅如此,在此块中,您正在解析输入并第三次添加到列表。
if (!tempChoice.equals(""))
{
choice2num = Integer.parseInt(tempChoice);
list.add(choice2num);
}
这里还有很多问题(你将字符串解析为int或double两次)但问题的直接原因是没有使用else if
来避免做相互排斥的事情。