Java 为什么每次我继续while循环时都会重置变量?
我正在使用while和for循环遍历一个文本文件 我的代码的目标是遍历包含两列的CSV逗号分隔文本文件,并且只通过字符串解析映射。我不想要整数,这就是我的程序要做的 问题是,每次我重新启动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
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;
}
}