-1

在我的程序中,它读取了一个名为 datafile.txt 的文件...里面的 datafile.txt 是随机的 3 行单词。我的程序所做的是读取用户输入的文件,然后他们可以输入 Line # 和 Word #,它会告诉他们该位置的单词.. 例如..

要读取的文件是什么?

数据文件.txt

请输入行号和字号(第一行是1)。

2 2

这个词是:

我的问题是我的程序将 txt 文档中的 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");
    }       
} 
4

2 回答 2

1

使基于 1 的用户输入适应基于 0 的内部表示的明显解决方案是在某个点减去一个。看到你甚至不使用index1,写作

lines.get(index - 1)

不会完全解决你的问题。但我想你可以从那里得到它,并为单词 index 做类似的事情。

于 2012-09-08T22:19:55.017 回答
0

因为我假设您只是学习编程,所以我将指出 3 个改进领域

  • 就像数学有 BIDMAS 一样,它决定了表达式的评估顺序 Java 和其他程序语言以特定的方式评估语句。这意味着在函数的括号内可以包含语句而不是变量或常量。这将使用传递给被调用函数的结果(或返回)进行评估。这就是为什么 MvG 说你可以做到lines.get(index - 1)

  • 并非您应该考虑和计划的所有异常都会让编译器通知您。例如,在您的代码中输入了无效的行号或字号输入,您将获得运行时异常(数组索引超出范围)

  • 变量的命名应该很有用,你有indexindex1。有什么不同?我假设通过阅读您的代码,第一个应该是用户选择的行号索引,第二个应该是所述行上单词的索引。我可以建议requestedLineIndexrequestedWordIndex

最后一点,这不是一个常见的 StackOverflow 问题,因此为什么你的问题被“否决”了。如果您作为课程的一部分进行学习,是否有课程论坛或虚拟学习环境 (VLE) 可以发布问题?在相同学习水平的同龄人的支持往往有助于探索语言的基础知识。

于 2012-09-08T22:51:19.413 回答