Java根据文件检查名称

时间:2015-11-26 15:56:56

标签: java

我正在完成一项任务。对于此分配,我需要取两个名称,并针对具有名称列表的文件检查该名称。名称位于第一列。我有一个字符串设置来传递第一个问题,在方法中创建一个字符串,如果它在文件中,则分隔名称。我想要做的是创建一个循环,以便循环,重复问问题,直到它用第一个验证名称,然后在它做同样的事情后创建一个字符串。我的问题出现了,似乎陷入了无休止的循环。我希望有人能指出我正确的方向吗?

这是复制问题的可运行示例。

File.txt(这是部分的,但效果相同):

  

Abbie 431 552 742 924 0 0 0 0 752 644 601
  Abbigail 0 0 0 0 0 0 0 0 0 953 562
  Abby 0 0 0 0 0 906 782 548 233 211 209
  Abdiel 0 0 0 0 0 0 0 0 0 925 721
  Abdul 0 0 0 0 0 0 0 903 0 0 0
  阿卜杜拉0 0 0 0 0 0 0 0 0 0 863
  安倍248 328 532 764 733 0 0 0 0 0 0
  Abel 664 613 626 575 542 491 497 422 381 385 354

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Program52 {
    public static void main(String[] args) throws FileNotFoundException {
        String firstName = getName("First name: ");
        String secondName = getName("Second name: ");
    }

    public static String getName(String getUserName) throws FileNotFoundException {
        Scanner in = new Scanner(System.in);
        int count = 0;
        String name = "";
        boolean nameVerified = false;

        while (nameVerified == false) {
            File fileNames = new File("/file.txt");
            Scanner scnr = new Scanner(fileNames);

            System.out.print(getUserName);
            String name1 = in.next();
            String name2 = in.next();

            while (scnr.hasNextLine()) {

                String line = scnr.nextLine();
                if (line.toLowerCase().startsWith(name1.toLowerCase())) {
                    count++;
                    if (count == 1) {
                        nameVerified = true;
                        System.out.println();
                        name = line.substring(0, line.indexOf(" "));

                        System.out.println(name);
                    }
                }
            }
            if (nameVerified == false) {
                System.out.print("Invalid. Enter another name: ");
                name1 = in.next();
                name2 = in.next();
            }
        }
        return name;
    }
}

1 个答案:

答案 0 :(得分:1)

OP通过删除name2变量和请求的第二个用户输入解决了这个问题。

这是他的修正代码:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Program52 {
    public static void main(String[] args) throws FileNotFoundException {
        String firstName = getName("First name: ");
        String secondName = getName("Second name: ");
    }

    public static String getName(String getUserName) throws FileNotFoundException {
        Scanner in = new Scanner(System.in);
        int count = 0;
        String name = "";
        boolean nameVerified = false;

        while (nameVerified == false) {
            File fileNames = new File("/file.txt");
            Scanner scnr = new Scanner(fileNames);

            System.out.print(getUserName);
            String name1 = in.next();

            while (scnr.hasNextLine()) {

                String line = scnr.nextLine();
                if (line.toLowerCase().startsWith(name1.toLowerCase())) {
                    count++;
                    if (count == 1) {
                        nameVerified = true;
                        System.out.println();
                        name = line.substring(0, line.indexOf(" "));

                        System.out.println(name);
                    }
                }
            }
            if (nameVerified == false) {
                System.out.print("Invalid name.");
            }
        }
        return name;
    }
}