通过拆分和解析main()方法的参数来解决问题

时间:2015-03-21 05:01:47

标签: java arrays

我对main方法的输出有困难。如果一个用户输入一堆随机字符串,我的程序应该只获得整数并将它们分组成一对。例如,如果用户输入3 2 54 -5,则输出应为:

(3,2)
(54,-5)

或者,另一个例子:如果输入是1 2 3,程序应该只输出

(1,2)

因为找不到数字3的任何其他对。该计划的重点是成对收集数字。如果程序无法将String转换为int,则抛出异常。请问smb请帮帮我?

public static void main(String [] args) throws Exception 
    {
        int [] number =  new int [args.length];
        try
        {
            for (int i = 0; i < args.length; i++)
            {

                number[i] = Integer.parseInt(args[i]);
                System.out.println("("+i+","));

            }
        }
        catch (NumberFormatException e)
        {
            System.out.println(e.getMessage());
        }
    }

3 个答案:

答案 0 :(得分:0)

首先,为了遍历所有输入而不是在第一次触发非整数时离开循环,try / catch块必须在for循环内。然后,为了处理你想要成对的事实,你不想在每次使用int时打印出来,只想在从零开始的计数器是奇数时才打印出来。只有在找到整数时(当没有抛出异常时),计数器才会递增。最后,我相信你所说的是你只想在没有找到int对的情况下抛出异常,所以这就是计数器从未通过的情况。所以这一切都可以按如下方式处理:

int count = 0;
        for (int i = 0; i < args.length; i++)
            {

                try
                {
                    number[count] = Integer.parseInt(args[i]);
                    if(count%2==1)
                        System.out.println("("+number[count-1]+","+number[count]+")");
                    count++;
                }
                catch (NumberFormatException e)
                {
                    //if you're intention is to throw an exception if something other than an int is entered.
                    throw new Exception(e.getMessage());
                }
        }
        if(count <= 1) throw new Exception("No int pair found");

答案 1 :(得分:0)

我认为你可以做的是使用String类中的split方法,如果你已经知道用户将使用该格式,你就无法解析它们,因为用户输入了一些空格。如果用户输入的数据来自String数组,您可以使用以下内容:

public static void main(String [] args) throws Exception 
{
   int[] numbers = new int[args.length];
   try
    {
        for (int i = 1; i < args.length; i+=2)
        {

            number[i-1] = Integer.parseInt(args[i-1].split(" ")[0];
            number[i] = Integer.parseInt(args[i].split(" ")[0];
            System.out.println("("+number[i-1]+","+number[i]+")");
        }
    }
    catch (NumberFormatException e)
    {
        System.out.println(e.getMessage());
    }
}

此外,如果您使用i + = 2,正如您在for中所见,那么您从1开始,然后它从2开始增加2.然后它与自身和之前的数字一起工作,保证只有对

答案 2 :(得分:0)

这对你有用,

int[] number = new int[args.length];
    try {
        for (int i = 0; i < args.length; i++) {
            Pattern p = Pattern.compile("-?\\d+");
            Matcher m = p.matcher(args[i]);
            if (m.find()) {
                number[i] = Integer.parseInt(m.group());
                System.out.print(number[i] + ",");
            }
        }
    } catch (NumberFormatException e) {
        System.out.println(e.getMessage());
    }