Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何添加通过解析获得的值以获得;“价值”;";列“?”;?_Java_Loops_Arraylist_Add - Fatal编程技术网

Java 如何添加通过解析获得的值以获得;“价值”;";列“?”;?

Java 如何添加通过解析获得的值以获得;“价值”;";列“?”;?,java,loops,arraylist,add,Java,Loops,Arraylist,Add,我的代码遍历一个输入文件并将其拆分为“列” 它打印出该列中每一行的值。我对此进行了测试,以检查我的程序是否能够正确地遍历这些列。我想知道如何输出每列的总和 例如: [a, 1, 2, 3] [3, v, 3, x] [5, 1, d, c] 如果我对第0列的值求和,我希望它将3和5相加。如果列中的值不是数字,则应将该值转换为0 我的代码: public static Double column_sum(String filename, int column) { if(column &

我的代码遍历一个输入文件并将其拆分为“列”

它打印出该列中每一行的值。我对此进行了测试,以检查我的程序是否能够正确地遍历这些列。我想知道如何输出每列的总和

例如:

[a, 1, 2, 3]
[3, v, 3, x]
[5, 1, d, c]
如果我对第0列的值求和,我希望它将3和5相加。如果列中的值不是数字,则应将该值转换为0

我的代码:

public static Double column_sum(String filename, int column)
{
    if(column < 0)
    {
        return null;
    }
    File temp = new File(filename);
    Scanner input_file;
    try
    {
        input_file = new Scanner(temp);
    }
    catch (Exception e)
    {
        return null;
    }
    ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>();
    while(input_file.hasNextLine())
    {
        String line = input_file.nextLine();
        List<String> myList = new ArrayList<String>(Arrays.asList(line.split(",")));
            Double numberdouble =0.0;
            String numberstring = myList.get(column);
            if(isDouble(numberstring))
            {
              numberdouble = Double.parseDouble(numberstring);
            }
            else
            {
              numberdouble=0.0;
            }
            System.out.println(numberdouble);
    }
    return 1.23; //placeholder
}
公共静态双列\u和(字符串文件名,int列)
{
如果(列<0)
{
返回null;
}
文件温度=新文件(文件名);
扫描仪输入文件;
尝试
{
输入文件=新扫描仪(临时);
}
捕获(例外e)
{
返回null;
}
ArrayList结果=新建ArrayList();
while(input_file.hasNextLine())
{
String line=input_file.nextLine();
List myList=newarraylist(Arrays.asList(line.split(“,”));
双倍数字双倍=0.0;
String numberstring=myList.get(列);
if(双(数字串))
{
numberdouble=Double.parseDouble(numberstring);
}
其他的
{
numberdouble=0.0;
}
System.out.println(数字双);
}
返回1.23;//占位符
}

您要做的是创建一个二维矩阵。并将值存储在其中。完成此操作后,将很容易解析和添加列。 根据你的例子:

Double [][] myMatrix = new Double[3][4];
int counter = 0, rowIndex=0,columnIndex=0;
while(input_file.hasNextLine())
{   counter++;
    if(counter%4 == 0)
    {
        rowIndex++;
        columnIndex=0;
    }
    String line = input_file.nextLine();
    List<String> myList = new ArrayList<String>(Arrays.asList(line.split(",")));
        Double numberdouble =0.0;
        String numberstring = myList.get(column);
        if(isDouble(numberstring))
        {
          numberdouble = Double.parseDouble(numberstring);
        }
        else
        {
          numberdouble=0.0;
        }
        myMatrix[rowIndex][columnIndex++] = number double;
        System.out.println(numberdouble);
}
Double[]myMatrix=新的Double[3][4];
int计数器=0,行索引=0,列索引=0;
while(input_file.hasNextLine())
{计数器++;
如果(计数器%4==0)
{
rowIndex++;
柱状指数=0;
}
String line=input_file.nextLine();
List myList=newarraylist(Arrays.asList(line.split(“,”));
双倍数字双倍=0.0;
String numberstring=myList.get(列);
if(双(数字串))
{
numberdouble=Double.parseDouble(numberstring);
}
其他的
{
numberdouble=0.0;
}
myMatrix[rowIndex][columnIndex++]=双精度数字;
System.out.println(数字双);
}

注意:索引将严格按照您的示例执行。您可以使其更具可配置性。

请参阅以下代码(我已经对其进行了测试)。因为我不知道您的
isDouble
函数的实现,所以我构建了一个简单(但不优雅)的函数。我还注释了两行未使用的代码,并添加了
input_file.close()
关闭资源。“test.txt”的内容与您的输入示例完全相同:

a,1,2,3
3,v,3,x
5,1,d,c
代码:


在您的示例中,
分别为0、1、2和3时,预期的输出是什么?列:回答0:8 1:2 2:5 3:3明白了,请参阅我的回答:-)有没有一种方法可以使用我所拥有的?我只想知道如何添加值,因为输入文件有更多的列和行,我不想将行和列的数量硬编码到一个矩阵中。你可以按照你想要的方式来做,而不是使用2D数组。使用列表可以动态增长。将字符串的总数仅保留在每一列中,以便列表中的0元素是第1列的总数,以此类推。
a,1,2,3
3,v,3,x
5,1,d,c
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class ColumnSum {
    public static void main(String[] args) {
        System.out.println(column_sum("test.txt", 0));
        System.out.println(column_sum("test.txt", 1));
        System.out.println(column_sum("test.txt", 2));
        System.out.println(column_sum("test.txt", 3));
    }

    public static boolean isDouble(String s) {
        try {
            Double.parseDouble(s);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public static Double column_sum(String filename, int column) {
        Double sum = 0.0;
        if (column < 0) {
            return null;
        }
        File temp = new File(filename);
        Scanner input_file;
        try {
            input_file = new Scanner(temp);
        } catch (Exception e) {
            return null;
        }
        // ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>();
        while (input_file.hasNextLine()) {
            String line = input_file.nextLine();
            List<String> myList = new ArrayList<String>(Arrays.asList(line.split(",")));
            Double numberdouble = 0.0;
            String numberstring = myList.get(column);
            if (isDouble(numberstring)) {
                numberdouble = Double.parseDouble(numberstring);
                sum += numberdouble;
            } else {
                numberdouble = 0.0;
            }
            // System.out.println(sum);
        }
        input_file.close();
        return sum;
    }
}
8.0
2.0
5.0
3.0