将数组元素从字符串转换为整数

时间:2014-11-07 16:36:42

标签: java string integer converter

我试图计算存储在数组中的值,这是我的代码:

    public void printScores()
{

    String sep = ":";
    File inputfile = new File ("P:/SD/Assignment1/fbScores.txt");

        String [] stringArr;
        String line = "";



        try {
            Scanner filescan = new Scanner(inputfile);
            while(filescan.hasNext())
            {
                line = filescan.nextLine();


                stringArr = line.split(sep);
                if(stringArr.length ==  4)
                {

                    System.out.println(stringArr[0]+"\t [" +stringArr[2]+"]\t|" + stringArr[1]+"\t["+ stringArr[3]+" ]\n");

                }

                else
                {
                    throw new IllegalArgumentException("String " + line + " does not contain " + sep);
                }



             }
            filescan.close();


        }
            catch (FileNotFoundException e)
            {
                System.out.println("problem " +e.getMessage());
            }

        }
    public void totalGoals()
    {
        int count;
        for (int i = 0; i<stringArr.length; i++)
        {
            //int num[i] = Integer.parseInt(stringArr);

        }
    }

}

基本上我只想添加存储在[2]和[3]中的数字,我在底部的totalGoals方法是我开始的地方,但无法弄清楚如何从字符串更改为一个整数,任何帮助将不胜感激!

更新:

public void totalGoals()         {

        int[] num = new int[stringArr.length]; 
        int count = 0;
        for (int i = 0; i<stringArr.length; i++)
        {
            num[i] = Integer.parseInt(stringArr[i]);
            count = count + num[i];
            System.out.println(count);
        }
    }

3 个答案:

答案 0 :(得分:1)

您想要单独解析每个字符串 - 您似乎正在尝试执行整个数组

int[] num = new int[stringArr.length]; //don't forget to declare your num[] array

for (int i = 0; i<stringArr.length; i++)
{
    num[i] = Integer.parseInt(stringArr[i]); // stringArr[i] instead of stringArr
}

请注意当您将其分解为for loop格式时,此代码实际执行的操作。

int[] num = new int[4];
num[0] = Integer.parseInt(stringArr[0]); //the for loop is starting at 0 and stopping 
num[1] = Integer.parseInt(stringArr[1]); //when it hits 4
num[2] = Integer.parseInt(stringArr[2]);
num[3] = Integer.parseInt(stringArr[3]);

事实上,您只需要23 ..您需要做的就是将它们添加到一起。您已经可以使用count变量代替num

因此,假设您只想循环浏览2和3 ...请查看for loop

for (int i = 0; i < stringArr.length; i++)

int i = 0             //your loop is starting at 0
i < stringArr.length; //its ending when i is the array's length (should be 4 judging by your other code)
i++                   // i increases by 1 at the end of each time through

因此,如果01无用,请尝试使用int i = 2

您有一个count变量。也许它应该从0开始..而不是设置num变量,您可以将值添加到count变量。


关于你的方法..它本身应该有效。

我也不确定哪一行是line 73

如果是第一行:int[] num = new int[stringArr.length];那么您的stringArr不存在(方法)或您的stringArr未初始化(再次,对于这种方法)

看看你给我看的代码,我猜这个问题就在第一行。

public void printScores() {
    //other code

    String[] stringArr;

    //other code
}

public void totalGoals() {
    int[] num = new int[stringArr.length]; 
    int count = 0;
    for (int i = 0; i<stringArr.length; i++)
    {
        num[i] = Integer.parseInt(stringArr[i]);
        count = count + num[i];
        System.out.println(count);
    }
}

就像这样完成,你甚至无法编译。 stringArr不存在totalGoals。这两种方法是分开的,不能“看到”彼此的变量。

如果您的代码如下所示 - 那么您将声明stringArr两次,并且您有两个单独的变量名称相同的东西!

{
    String[] stringArr; //This is what totalGoals would be using - it is never assigned

    public void printScores() {
        String[] stringArr; //This one is used and assigned within printScores
                            //but totalGoals cannot see/use it
    }

    public void totalGoals() {

    }
}

答案 1 :(得分:0)

使用Integer.parseInt(String s)Integer.parseInt(String s, int radix)String转换为Integer或原始int

例如:

try {
    String s = "42";
    int i = Integer.parseInt(s);
}
catch (NumberFormatException nfe) {
    nfe.printStackTrace();
}

如果更适合您的情况,您也可以使用Scanner.nextInt

答案 2 :(得分:0)

使用integer.parseint将字符串解析为int

     if(stringArr.length ==  4)
                        {
        for(int i=0;i<stringArr.length;i++)
{

    int    c = Integer.parseInt(stringArr[2])+ Integer.parseInt(stringArr[3]);


        }
                        }