Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.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 为什么每次我继续while循环时都会重置变量?_Java_List_Csv_Dictionary_Treemap - Fatal编程技术网

Java 为什么每次我继续while循环时都会重置变量?

Java 为什么每次我继续while循环时都会重置变量?,java,list,csv,dictionary,treemap,Java,List,Csv,Dictionary,Treemap,我正在使用while和for循环遍历一个文本文件 我的代码的目标是遍历包含两列的CSV逗号分隔文本文件,并且只通过字符串解析映射。我不想要整数,这就是我的程序要做的 问题是,每次我重新启动while循环转到下一行时,它都会重新启动变量,并假定它总是在第一行 这是我的密码: CSVReader reader = new CSVReader(new FileReader("sortMark12.txt"), ','); List<String[]> myE

我正在使用while和for循环遍历一个文本文件

我的代码的目标是遍历包含两列的CSV逗号分隔文本文件,并且只通过字符串解析映射。我不想要整数,这就是我的程序要做的

问题是,每次我重新启动while循环转到下一行时,它都会重新启动变量,并假定它总是在第一行

这是我的密码:

        CSVReader reader = new CSVReader(new FileReader("sortMark12.txt"), ',');
        List<String[]> myEntries = reader.readAll();
        reader.close();

//mark12Line is a string of the file name, and mark12Br is a buffered reader

//While the text file's line is not empty
whileloop: while ((mark12Line = mark12Br.readLine()) != null)
        {
            //Declaring row, this keeps getting reset
            for (int row = 0; row < myEntries.size(); row++)
            {
                //Declaring column, this also keeps getting reset
                for (int column = 0; row < myEntries.get(row).length; column++)
                {
                    //While the row and column is not an integer
                    while (!isInteger(myEntries.get(row)[column]))
                    {
                        //Put the value in position row and column into the map.
                        mark12Map.put(mark12Line.split(",")[0], myEntries.get(row)[column]);
                        continue whileloop;
                    }
                }
            }
        }
CSVReader reader=new-CSVReader(new-FileReader(“sortMark12.txt”),',';
List myEntries=reader.readAll();
reader.close();
//mark12Line是一个文件名字符串,mark12Br是一个缓冲读取器
//而文本文件的行不是空的
whileloop:while((mark12Line=mark12Br.readLine())!=null)
{
//声明行时,将不断重置该行
对于(int row=0;row
在我的代码中发生的是,在第一行和第一列,它检测到它是一个整数,所以它不会将该整数放入映射中。第一行和第二列是字符串,因此放在映射中

问题是,一旦完成,它将继续我的while循环,并且
都已重置为0。因此,它的行为就好像它仍然在同一行上一样,尽管我已经在
row++
column++
处对其进行了增量处理

为什么我的整数变量总是被重置为0?我需要他们每次增加一条不同的线

是我宣布他们错了,还是有什么东西破坏了我的代码

如果你需要更多的代码,请告诉我


谢谢您的帮助。

我不确定您是否以最合适的方式处理问题,但要回答这个问题,您的变量声明不正确

//While the text file's line is not empty
int row = 0;
int column = 0
whileloop: while ((mark12Line = mark12Br.readLine()) != null)
        {
            //Declaring row, this keeps getting reset
            for (; row < myEntries.size(); row++)
            {
                //Declaring column, this also keeps getting reset
                for (; column < myEntries.get(row).length; column++)
                {
                    //While the row and column is not an integer
                    /*while*/ if (!isInteger(myEntries.get(row)[column]))
                    {
                        //Put the value in position row and column into the map.
                        mark12Map.put(mark12Line.split(",")[0], myEntries.get(row)[column]);
                        //continue whileloop;
                    }
                }
            }
        }
//当文本文件的行不为空时
int行=0;
int列=0
whileloop:while((mark12Line=mark12Br.readLine())!=null)
{
//声明行时,将不断重置该行
对于(;行
我不确定您是否以最合适的方式处理问题,但要回答这个问题,您的变量声明不正确

//While the text file's line is not empty
int row = 0;
int column = 0
whileloop: while ((mark12Line = mark12Br.readLine()) != null)
        {
            //Declaring row, this keeps getting reset
            for (; row < myEntries.size(); row++)
            {
                //Declaring column, this also keeps getting reset
                for (; column < myEntries.get(row).length; column++)
                {
                    //While the row and column is not an integer
                    /*while*/ if (!isInteger(myEntries.get(row)[column]))
                    {
                        //Put the value in position row and column into the map.
                        mark12Map.put(mark12Line.split(",")[0], myEntries.get(row)[column]);
                        //continue whileloop;
                    }
                }
            }
        }
//当文本文件的行不为空时
int行=0;
int列=0
whileloop:while((mark12Line=mark12Br.readLine())!=null)
{
//声明行时,将不断重置该行
对于(;行
根据您对问题的描述和对Paul Guiheen答案的回答,我认为以下代码可能更接近您应用程序的预期逻辑:

/* EDITED ...see below */

问题 每次外部
while
循环执行时,
变量都会被重置,因为它们是在
while
循环内部初始化的。换句话说,每当外部
循环执行时,它们将被重新初始化为零

您可以将它们的initialize移到外部
while
循环之外以避免这种情况,如下所示:

int row = 0;
int column = 0;
whileloop: while (/* test something */)
{
    for ( ; row < myEntries.size(); ++row)
    {
        for ( ; row < myEntries.get(row)[column]; ++column)
        {
            /* do stuff */;
        }
    }
}
你的“东西”在哪里

但令人困惑的是,您还必须每行读取并验证一行:

if ((mark12Line = mark12Br.readline()) != null)
{
    /* process each column in the row */;
}
那你把它放在哪里?就在
循环的“行”
内部(这样您就可以为每行读取一行),就在
循环的“列”
外部(因为每行中有多个列):


最终解决方案 综合以上所有因素,最终产品如下所示:

for (int row = 0; row < myEntries.size(); ++row)
{
    if ((mark12Line = mark12Br.readline()) != null)
    {
        for (int column = 0; column < myEntries.get(row).length; ++column)
        {
            if (!isInteger(myEntries.get(row)[column]))
            {
                mark12Map.put(mark12Line.split(",")[0], myEntries.get(row)[column]);
            }
        }
    }
    else
    {
        break;
    }
}
for(int row=0;row
从您的问题描述中我了解到
for (int row = 0; row < myEntries.size(); ++row)
{
    if ((mark12Line = mark12Br.readline()) != null)
    {
        for (int column = 0; column < myEntries.get(row).length; ++column)
        {
            /* do stuff */;
        }
    }
}
else
{
    break;  // break out of outer loop because there are no more lines to read
}
for (int row = 0; row < myEntries.size(); ++row)
{
    if ((mark12Line = mark12Br.readline()) != null)
    {
        for (int column = 0; column < myEntries.get(row).length; ++column)
        {
            if (!isInteger(myEntries.get(row)[column]))
            {
                mark12Map.put(mark12Line.split(",")[0], myEntries.get(row)[column]);
            }
        }
    }
    else
    {
        break;
    }
}