在Java中如何将String[] args转换为int/double类型?

6
我想将一个主程序的 "String[] args" 转换为5个整数和4个双精度浮点数。我知道这有点令人困惑。
我的想法是使用 foreach 循环遍历 String args[] 并将它们添加到一个整数数组中(前5个),但由于需要使用 for 循环来处理数组,所以无法实现。
if (args != null) {
        // If arguments where given, use the arguments and run the program
        // NEED TO SOMEHOW CONVERT ARGS INTO INTEGER FORM AFTER BEING PASSED IN
        ArrayList<Integer> valArr = new ArrayList<Integer>(10); // could be 9
        for (String val : args) {
            // Parse the string and add it to valArray
            int temp = Integer.parseInt(val);
            valArr.add(temp);
        }   

        CarPark cp = new CarPark(valArr[0], valArr[1], valArr[2], valArr[3]);   

我目前正在看以下内容... 我完全错了吗?还是接近正确?


为什么不能使用 for (int i = 0; i < 5; i++) - Luiggi Mendoza
1
你将把最后4个双精度数转换为整数,并以此方式获得“NumberFormatException”异常。 - Abimaran Kugathasan
我可以,也应该这样做。但是我该如何将它们发送到构造函数中呢? - joelwmale
你对它们是整数和双精度浮点数有多有信心?如果不是,你可能想在那里抛出一个try/catch块将其设置为0,以防捕获到格式异常。否则,我同意@LuiggiMendoza的观点..在检查所需数量的参数是否存在后,最好使用两个for语句。 - Gary Schreiner
它们是 100% 的 5 个整数和 4 个双精度浮点数。如果用户没有输入足够的值,则程序应使用默认值(已经可以正常工作/运行)。 - joelwmale
5个回答

3

只需用两个索引for循环解析即可。

int[] myInts = new int[5];
double[] myDoubles = new double[4];

// Initialize these arrays with "defaults" here.

// Notice how we handle the possibility of the user not entering enough values.
for (int i = 0; i < Math.min(5, args.length); i++)
    myInts[i] = Integer.parseInt(args[i]);

for (int i = 0; i < Math.min(4, args.length - 5); i++)
    myDoubles[i] = Double.parseDouble(args[i+5]);

CarPark cp = new CarPark(myInts[0], myInts[1], myInts[2], myInts[3]);   

“mydoubles” 会从 [0] 开始表示第一个 double,还是从 5 或 6 开始? - joelwmale
@user2926862,左侧从[0]开始,但它从args[5]开始读取。 - merlin2011
明白了,这正是我在寻找的,非常感谢你。 - joelwmale
@user2926862,请查看更新以处理用户未输入足够值的情况。 - merlin2011

0

你需要按照以下方式从数组列表中获取值

CarPark cp = new CarPark(valArr.get(0), valArr.get(1), valArr.get(2), valArr.get(3));

1
你有在任何地方遇到NumberFormatException吗? - Vishnudev K

0

看一下ArrayList文档

上面的内容可以是这样的

CarPark cp = new CarPark(valArr.get(0), valArr.get(1), valArr.get(2), valArr.get(3));

@IwishIcouldthinkofagood 我不知道他什么时候发布的。当我在打字的时候,那个人已经发布了。我对此不负责任。 - subash

0

我觉得这应该可以工作。

if (args != null) {
        // If arguments where given, use the arguments and run the program
        // NEED TO SOMEHOW CONVERT ARGS INTO INTEGER FORM AFTER BEING PASSED IN
        ArrayList<Integer> valArr = new ArrayList<Integer>(10); // could be 9
        for (String val : args) {
            // Parse the string and add it to valArray
            int temp = Integer.parseInt(val);
            valArr.add(temp);
        }
CarPark cp = new CarPark(valArr.get(0), valArr.get(1), valArr.get(2), valArr.get(3));

0
这是您已经更正的代码:-
import java.util.ArrayList;
import java.util.Scanner;

    public class Main {

        public static void main(String args[]){


            Scanner sc=new Scanner(System.in);
        args=new String[4];
            for(int i=0;i<4;i++){
            System.out.println("Enter value no- "+(i+1));
            args[i]=sc.nextLine();
        }
             ArrayList<Integer> valArr = new ArrayList<Integer>(10);
            if (args != null) {
            // If arguments where given, use the arguments and run the program
            // NEED TO SOMEHOW CONVERT ARGS INTO INTEGER FORM AFTER BEING PASSED IN
            // could be 9
            for (String val : args) {
                // Parse the string and add it to valArray
                int temp = Integer.parseInt(val.trim());
                valArr.add(temp);
            }
        }
            System.out.println(valArr);
            //CarPark cp = new CarPark(valArr[0], valArr[1], valArr[2], valArr[3]); 
        }
        }

这只是整数部分的代码,你可以按照类似的方式扩展 args 数组长度并包括 double 值。记得使用 val.trim() 删除空格否则会抛出 NumberFormatException 异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接