【问题标题】:Create a java array by reading from a file通过从文件中读取来创建一个 java 数组
【发布时间】:2015-09-30 11:22:22
【问题描述】:

我刚刚开始学习 Java,我正在尝试从我创建的文本文件中读取名称。然后我希望我的程序向用户询问姓名,然后检查该姓名是否在该列表中。但是,我在使用数组时遇到了麻烦,所以首先我尝试只读取名称,然后将它们存储在数组中。这是我到目前为止所做的。

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


public class readnames
{
        public static void main(String[] args) throws FileNotFoundException
        {
            File file=new File("names.txt");
            Scanner my_input = new Scanner(file);
            int i=0;

            String[] names = new String[20] ;

            while(my_input.hasNext() && !names.equals("-1")) 
            { 
                names[i]=my_input.nextLine();
                i++;
            }

            my_input.close();
            System.out.println(names[i]);
        }
}

【问题讨论】:

  • while(my_input.hasNext() && !names.equals("-1"))?
  • 我文档的最后一行包含-1。所以我希望它读取名称,直到遇到-1。
  • 见names是一个数组。
  • 看看this
  • 啊,我明白了。有什么办法可以解决吗?

标签: java arrays


【解决方案1】:
    public static void main(String[] args) throws FileNotFoundException {
            File file = new File("names.txt");
            Scanner my_input = new Scanner(file);

            ArrayList<String> names = new ArrayList<>();

            while (my_input.hasNext()) {
                 String t =my_input.nextLine();
                 if( !t.equals("-1"))
                 names.add(t);

            }


            System.out.println("Enter name");
            String nameToCheck = my_input.nextLine();
            if (names.contains(nameToCheck)) {
                System.out.println("Found");
            }
            my_input.close();
        }

我建议你使用 ArrayList 因为文件可能包含超过 20 个名称

普通数组

public static void main(String[] args) throws FileNotFoundException {
        File file = new File("names.txt");
        Scanner my_input = new Scanner(file);

        String[] names = new String[20];
        int i = 0;
        while (my_input.hasNext()) {
             String t =  my_input.nextLine();
             if(!t.equals("-1"))
             names[i++] = t;
        }


        System.out.println("Enter name");
        String nameToCheck = my_input.nextLine();
        for (String temp : names) {
            if (temp.equals(nameToCheck)) {
                System.out.println("FOund");
            }
        }
        my_input.close();
    }

【讨论】:

    【解决方案2】:

    !names.equals("-1") 始终是true,因为names 是一个数组。虽然不使用 ArrayList(动态大小的数组),但这里有一个快速修复:

    public class ReadNames {
        public static void main(String[] args) throws Throwable {
            File file = new File("names.txt");
            Scanner my_input = new Scanner(file);
            int i = 0;
            // FIXME the file you're reading may exceed 20 lines, use ``ArrayList`` instead
            String[] names = new String[20]; 
            while(my_input.hasNext()) {
                String line = my_input.nextLine();
                if(line.equals("-1")) {
                    // end reading prematurely
                    break;
                }
                names[i] = line;
                i++;
            }
            my_input.close();
            // print entire array
            System.out.println(Arrays.toString(names));
        }
    }
    

    【讨论】:

      【解决方案3】:

      您正在增加循环内的 i 变量。 如果您可以显示姓氏,则可以在之前减少变量以 name[i].

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多