我是java的初学者,我正在尝试从输入文件填充二维字符数组。为此,我构造了一个方法,它接受一个2d字符数组作为参数变量,然后读取文件并将其存储为字符数组。到目前为止,我已经完成了除填充数组之外的所有事情,因为当我运行代码时,程序会抛出NoSuchElement异常。如果有人能帮助我,我会非常感激。
public static char [][] MakeWordArray (char [][] givenArray)
{
try
{
File wordFile= new File ("words.txt");
Scanner in= new Scanner (wordFile);
int rows =0;
int col=0;
while (in.hasNextLine())
{
rows = rows + 1;
col = col + 1;
in.next();
}
char [][] words = new char [rows][col];
File wordFile2= new File ("words.txt");
Scanner in2= new Scanner(wordFile2);
for ( int i = 0; i < rows; i++)
{
for (int j = 0; j < col; j++)
{
String wordly = in2.nextLine();
words [i][j] = wordly.charAt(i);
}
}
return words;
}
catch (FileNotFoundException e)
{
System.out.println("File Does Not Exist");
}
return null;
}
答案 0 :(得分:0)
尝试使用do while循环而不是while
do
{
rows=rows+1;
col=lol+1;
in.next();
}
while(in.hasNext());
答案 1 :(得分:0)
我认为你的计数方法存在一些问题。
如果你想计算你的.txt有多少行:
int counter = 0;
while (in.hasNextLine())
{
counter++;
in.nextLine();
}
如果您想计算您的.txt有多少char
:
int counterWithoutSpace = 0, counterWithSpace = 0;
while (in.hasNextLine())
{
String line = in.nextLine();
Scanner inLine = new Scanner(line);
while (inLine.hasNext())
{
String nextWord = inLine.next();
counterWithoutSpace += nextWord.length();
counterWithSpace += nextWord.length() + 1;
}
counterWithSpace--;
}
如果您想计算每行有多少个字符,我建议ArrayList。因为数组的大小是动态的。
请注意,您也可以使用上面的字符计数器逻辑List。
请参阅以下内容:
List<Integer> arr = new ArrayList<Integer>();
while (in.hasNextLine())
{
arr.add(in.nextLine().length());
}
如果您真的需要静态数组,可以使用:
Integer[] intArr = arr.toArray(new Integer[0]);
您可以按如下方式转换其整个功能,以获取.txt的每个Character
的列表:
List<Character> arr = new ArrayList<Character>();
while (in.hasNextLine())
{
String line = in.nextLine();
for (char c : line.toCharArray())
{
arr.add(c);
}
}
答案 2 :(得分:0)
这里有很多问题。
1)为什么在你甚至不使用时都提供了char [] []参数?
2)当您需要做的只是从文件中读取并将其转换为2d数组时,为什么要使用两个文件?
3)方法名称应遵循驼峰套管惯例。
从我对你的问题的理解,这是我试过的代码。
注意 - 因为需求是Array
而不是动态数据类型,如List ArrayList
等,输入char数组的数据可能会丢失
说这是有效的。
public class StackOverflow{
public static char [][] makeWordArray ()
{
try{
File f = new File("C:\\docs\\mytextfile.txt");
Scanner scan = new Scanner(f);
int row = 0, col = 0;
String readData = "";
while(scan.hasNextLine()){
readData += scan.nextLine();
row++;
}
double range = (readData.length()/row);
col = (int)Math.ceil(range);
char[][] arr = new char[row][col];
int count = 0;
for (int i = 0; i < row; i++){
for(int j = 0; j < col; j++){
arr[i][j] = readData.charAt(count++);
System.out.println("Pos: ["+ i +"][" + j + "]" + arr[i][j]);
}
}
return arr;
}
catch(FileNotFoundException fe){
System.err.println(fe.getMessage());
return null;
}
}
public static void main(String[] arg){
char[][] myarr = StackOverflow.makeWordArray();
//print your array
}
}