使用手动输入在Comparable ArrayList中存储整数,双精度或字符串

时间:2017-12-20 16:14:48

标签: java arraylist

我正在尝试提示用户输入以在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]

我的错误是什么?

2 个答案:

答案 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,则hasInthasDouble都将为真。在这种情况下,两个块都将运行,并且相同的数字将作为int和double添加。 (你也没有在任何地方重置它们。如果你输入的东西不是int,那么之后就不再添加整数了。)

不仅如此,在此块中,您正在解析输入并第三次添加到列表

if (!tempChoice.equals(""))
    {
        choice2num = Integer.parseInt(tempChoice);
        list.add(choice2num);
    }

这里还有很多问题(你将字符串解析为int或double两次)但问题的直接原因是没有使用else if来避免做相互排斥的事情。