Java 字符串数组返回空值
在下面的代码中,我读取带有电影列表的文本文件,并使用助手方法创建电影列表的字符串数组。在该方法中,我能够读取和打印文件的每一行。但是,当我尝试在main方法中迭代返回的数组时,只得到“null”。为什么会发生这种情况。到目前为止,在我的研究中,我还没有发现其他人发布的类似问题。请帮忙。谢谢Java 字符串数组返回空值,java,Java,在下面的代码中,我读取带有电影列表的文本文件,并使用助手方法创建电影列表的字符串数组。在该方法中,我能够读取和打印文件的每一行。但是,当我尝试在main方法中迭代返回的数组时,只得到“null”。为什么会发生这种情况。到目前为止,在我的研究中,我还没有发现其他人发布的类似问题。请帮忙。谢谢 import java.util.Random; import java.util.Scanner; import java.io.File; public class GuessTheMovie {
import java.util.Random;
import java.util.Scanner;
import java.io.File;
public class GuessTheMovie {
public static void main(String[] args) throws Exception {
try {
// Create File and Scanner objects
File file = new File("movies.txt");
Scanner scanner = new Scanner(file);
// Create String array to store all movie titles
List<String> movies = createMoviesArray(scanner);
for (String movie : movies) {
System.out.println(movie);
}
/*
String[] movies = createMoviesArray(scanner);
for (int i = 0; i < movies.length; i++) {
System.out.println(movies[i]);
} */
} catch (Exception e) {
System.out.println("Could not find file.");
}
}
////////////////////////// HELPER METHODS ////////////////////////////////////
/*
// Create String array to store all movie titles
private static String[] createMoviesArray(Scanner scanner) {
int count = 0;
String[] movies; // = new String[500];
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(count + " : " + line);
count += 1;
}
movies = new String[count];
return movies;
}*/
private static List<String> createMoviesArray(Scanner scanner) {
List<String> movies = new ArrayList<>();
// get line count for the size of the array
while (scanner.hasNextLine()) {
movies.add(scanner.nextLine());
}
return movies;
}
import java.util.Random;
导入java.util.Scanner;
导入java.io.File;
公共类猜谜游戏{
公共静态void main(字符串[]args)引发异常{
试一试{
//创建文件和扫描仪对象
File File=新文件(“movies.txt”);
扫描仪=新扫描仪(文件);
//创建字符串数组以存储所有电影标题
列表电影=createMoviesArray(扫描仪);
用于(字符串电影:电影){
System.out.println(电影);
}
/*
字符串[]电影=createMoviesArray(扫描仪);
for(int i=0;i
在返回之前
在createMoviesArray()
方法中创建一个新数组。您从未向该数组添加任何内容,因此从该方法返回后该数组为空。您应该在迭代文件之前创建一个新数组
如果您不知道文件的大小以及它有多少行,您可能应该使用一些动态大小的
集合
,比如ArrayList
,这很正常,因为您没有在数组中放入任何值
private static String[] createMoviesArray(Scanner scanner) {
int count = 0;
String[] movies; // = new String[500];
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(count + " : " + line);
count += 1;
}
movies = new String[count]; // all you do here, is create an array with 'count' spaces, all default values (being null)
return movies;
}
如果你想这样工作,你有两个选择(马上想到):
private static List<String> createMoviesArray(Scanner scanner) {
List<String> movies = new ArrayList<>();
while (scanner.hasNextLine()) {
movies.add(scanner.nextLine());
}
return movies;
}
私有静态列表createMoviesArray(扫描仪){
列表电影=新建ArrayList();
while(scanner.hasNextLine()){
movies.add(scanner.nextLine());
}
返回电影;
}
用你的行
movies=newstring[count];
您正在创建一个新的字符串数组。此时数组将只包含NULL
值,这些值在您的代码中没有任何地方实际写入数组。这就是为什么您的主方法正确地打印NULL
这是因为您没有将数据添加到movies数组中,而您只是我正在初始化它
如果要在helper方法的末尾打印movies对象,您会看到它也是null
我建议使用ArrayList
,因为您不知道该数组需要多大,所以它会变成这样:
import java.util.Random;
import java.util.Scanner;
import java.io.File;
public class GuessTheMovie {
public static void main(String[] args) throws Exception {
try {
// Create File and Scanner objects
File file = new File("movies.txt");
Scanner scanner = new Scanner(file);
// Create String array to store all movie titles
ArrayList<String> movies = createMoviesArray(scanner); // change this to ArrayList
for (movie : movies) { // I used a foreach loop
System.out.println(movie);
}
} catch (Exception e) {
System.out.println("Could not find file.");
}
}
////////////////////////// HELPER METHODS ////////////////////////////////////
// Create String array to store all movie titles
private static String[] createMoviesArray(Scanner scanner) {
int count = 0;
ArrayList<String> movies = new ArrayList<String>(); // change to Array List
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(count + " : " + line);
count += 1;
movies.add(line); // Add to end of ArrayList
}
return movies;
}
import java.util.Random;
导入java.util.Scanner;
导入java.io.File;
公共类猜谜游戏{
公共静态void main(字符串[]args)引发异常{
试一试{
//创建文件和扫描仪对象
File File=新文件(“movies.txt”);
扫描仪=新扫描仪(文件);
//创建字符串数组以存储所有电影标题
ArrayList movies=createMoviesArray(扫描仪);//将其更改为ArrayList
对于(电影:电影){//我使用了foreach循环
System.out.println(电影);
}
}捕获(例外e){
System.out.println(“找不到文件”);
}
}
//////////////////////////辅助方法////////////////////////////////////
//创建字符串数组以存储所有电影标题
私有静态字符串[]createMoviesArray(扫描仪){
整数计数=0;
ArrayList movies=新建ArrayList();//更改为数组列表
while(scanner.hasNextLine()){
字符串行=scanner.nextLine();
系统输出打印项次(计数+“:“+行);
计数+=1;
movies.add(line);//添加到ArrayList的末尾
}
返回电影;
}
您也可以通过这种方式执行相同的操作:-
package com.adddemo;
导入java.io.File;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Scanner;
公共类猜谜游戏{
公共静态void main(字符串[]args)引发异常{
试一试{
//创建文件和扫描仪对象
File File=新文件(“C:\\Users\\lenovo\\Desktop\\movies.txt”);
扫描仪=新扫描仪(文件);
//创建字符串数组以存储所有电影标题
列表电影=createMoviesArray(扫描仪);
对于(int i=0;ipackage com.adddemo;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class GuessTheMovie {
public static void main(String[] args) throws Exception {
try {
// Create File and Scanner objects
File file = new File("C:\\Users\\lenovo\\Desktop\\movies.txt");
Scanner scanner = new Scanner(file);
// Create String array to store all movie titles
List movies = createMoviesArray(scanner);
for (int i = 0; i < movies.size(); i++) {
System.out.println(i+" : "+movies.get(i));
}
} catch (Exception e) {
System.out.println("Could not find file.");
}
}
////////////////////////// HELPER METHODS ////////////////////////////////////
// Create String array to store all movie titles
private static List createMoviesArray(Scanner scanner) {
int count = 0;
List movies = new ArrayList<>();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(count + " : " + line);
count += 1;
movies.add(line);
}
return movies;
}
}