在我的程序中,它读取一个名为datafile.txt的文件......在datafile.txt中是一个随机的3行单词。我的程序所做的是读取用户键入的文件,然后他们可以键入Line#和Word#,它会告诉他们该位置的单词...例如..
要读取的文件是什么?
datafile.txt
请输入行号和单词编号(第一行为1)。
2 2
这个词是:
我的问题是我的程序将txt doc中的3行读为0,1,2,单词从0开始。所以要读取第一行中的第一个单词,他们必须输入0,0而不是1,1。我想要做的是让它工作,这样他们可以输入1,1而不是0,0。不知道我现在的问题是什么,这是我的代码......
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
public class readingFile {
/**
* @param args
* @throws IOException
* @throws validException
*/
public static void main(String[] args) throws IOException, checkException
{
System.out.println("Enter file name: " );
Scanner keyboard = new Scanner(System.in);
BufferedReader inputStream = null;
ArrayList<String> file = new ArrayList<String>();
String fileName = keyboard.next();
System.out.println ("The file " + fileName +
" has the following lines below: ");
System.out.println();
try
{
inputStream = new BufferedReader(new FileReader(fileName));
ArrayList<String> lines = new ArrayList<String>();
while(true)
{
String line = inputStream.readLine();
if(line ==null)
{
break;
}
Scanner itemnize = new Scanner(line);
while(itemnize.hasNext())
{
lines.add(itemnize.next());
}
lines.addAll(lines);
System.out.println(lines+"\n");
}
System.out.println("Please enter the line number and word number");
int index1 = keyboard.nextInt();
int index = keyboard.nextInt();
System.out.println("The word is: "+ lines.get(index));
}
catch(FileNotFoundException e)
{
System.out.println("Error opening the file " + fileName);
}
inputStream.close();
}
private static void checkValid(ArrayList<String> items, int index) throws checkException
{
throw new checkException("Not Found");
}
}
答案 0 :(得分:1)
将基于1的用户输入调整为基于0的内部表示的明显解决方案是在某个时刻减去1。看到你甚至没有使用index1
,写作
lines.get(index - 1)
不会完全解决您的问题。但我想你可以从那里拿出它,并为索引这个词做类似的事情。
答案 1 :(得分:0)
我认为你只是在学习编程,我将指出3个改进领域
很像数学如何使用BIDMAS来确定表达式的评估顺序Java和其他程序语言以微粒方式评估语句。这意味着在函数的括号内,您可以包含一个语句而不是变量或常量。这将在结果(或返回)传递到被调用函数的情况下进行评估。这就是为什么MvG说你可以做lines.get(index - 1)
并非您应该考虑和计划的所有异常都将由编译器通知您。例如,在您的代码中输入了行号或字号的无效输入,您将获得运行时异常(数组索引超出范围)
变量的命名应该很有用,您有index
和index1
。有什么不同?我假设从读取代码时,应该是用户选择的行号索引,第二个应该是所述行上的单词的索引。我可以建议requestedLineIndex
和requestedWordIndex
。
最后一点,这不是一个常见的StackOverflow问题,因此为什么你的问题被“拒绝”了。如果您正在学习课程的一部分,那么您可以在课程论坛或虚拟学习环境(VLE)上发布问题吗?在相同的学习水平上,您的同伴的支持往往有助于探索语言的基础知识。