Java -使用数组搜索csvfile

r1wp621o  于 2023-07-31  发布在  Java
关注(0)|答案(2)|浏览(112)

我有一个80行4列的csv.文件,它代表一个特定的电影商店。

  • 第1列:idSale
  • 第2集:电影
  • 第三栏:类型
  • 4td列:Director

该文件有一个包含上述名称的标题,其余行是内容。有79个销售,30部电影,10个导演和8个流派。在文件中,一部电影只有一个流派和一个导演。
电影、类型和导演都在重复。。只有ID是非重复值。
我已经通过计算行数和列数将csv文件放入了一个array2D中。2D数组称为movieCinema。
我已经设法将每一列存储到一个具有不可修复值的数组中,因为其中一项任务是打印电影、导演和流派。
我有3个重复值的数组,它们的名字如下:

  • 电影
  • 董事
  • 体裁

这个数组的长度等于array2D-1中的行数(因为我没有存储头部)。
我有3个数组,不重复的值)

  • moviesUnique(长度等于30)
  • 控制器(长度等于10)
  • 类型(长度等于8)

现在,最后一项任务是按导演克里斯托弗·诺兰的类型打印电影。范例:
克里斯托弗·诺兰
Genre:Action

  • 电影1
  • 电影5

类型:剧情

  • 电影2

类型:Sy-fy

  • 电影3
  • 电影4

我做不到我可以打印所有的电影Chistopher Nolan和他的所有类型,但我不能把他的电影类型。
这是我搜索的函数:

public static String[] search (String[][] matrix, String searchItem, int searchCol, int indexCol) {
    int arraySize = 0;
    int index = 0;
    String[] items;

    // Compares each line (skip the header) that is equals to the max value and increases arraySize
    for (int i=1; i<matrix.length; i++) {
        if (searchItem.equals(matrix[i][searchCol])){
            arraySize++;
        }
    }

    // Declare array
    items = new String[arraySize];

    // Store all lines that has correspondence to the searchItem
    for (int i=1; i<matrix.length; i++){
        if (searchItem.equals(matrix[i][searchCol])){
            items[index] = matrix[i][indexCol];
            index++;
        }
    }

    return items;
}

字符串
然后我有一个函数来存储一个名为uniqueValues的数组的唯一值,它工作得很好。

/**
 * Function that removes the duplicates of an array and stores only the unique valus
 * @param array
 * @return
 */
public static String[] uniqueValues (String[] array) {
    boolean duplicate;
    int index=0;
    int arraySize = 0;

    for (int i=1; i<array.length; i++) {
        duplicate = false;
        for (int j=i+1; j<array.length; j++) {
            if (array[i].equals(array[j]) && duplicate == false) {
                duplicate = true;
            }
        }

        if (duplicate == false) {
            arraySize++;
        }
    }

    String[] arrayUnique = new String[arraySize];

    for (int i=1; i<array.length; i++) {
        duplicate = false;
        for (int j=i+1; j<array.length; j++) {
            if (array[i].equals(array[j]) && duplicate == false) {
                duplicate = true;
            }
        }

        if (duplicate == false) {
            arrayUnique[index] = array[i];
            index++;
        }
    }

    return arrayUnique;
}


因此,在主要调用函数:

String director = "Chistopher Nolan"

// This has movies and genres repeated
String[] directorGenresRepeated = search(movieCinema, director, 4, 3);
String[] diretorMoviesRepeated = Library.search(store, director, 4, 2);

// This has movies and genres non-repeated
String[] directorGenres = Library.uniqueValues(directorGenresRepeated);
String[] directorMovies = Library.uniqueValues(directorMoviesRepeated);


所以如果我用for来打印这个数组我得到了Chistopher Nolan的所有电影,我得到了Chistopher Nolan的所有类型的电影…它打印如下:

  • 类型1
  • 类型2
  • 类型3

然后是电影:
1.电影1
1.电影2
1.电影3
1.电影4
1.电影5
但重点是要有:
Genre:Action

  • 电影1
  • 电影5

类型:剧情

  • 电影2

类型:Sy-fy

  • 电影3
  • 电影4

我该怎么办??我不能使用列表或集合...或者散列表我只能使用数组,2个数组,for循环,while循环。
你能帮帮我吗?

ygya80vv

ygya80vv1#

1.查找与导演“Christopher Nolan”相关的所有独特类型,并将它们存储在数组directorGenres中。
1.对于directorGenres数组中的每种类型,查找与该类型和导演关联的所有电影并将其存储在单独的数组moviesByGenre中。3.打印每种类型的电影沿着类型标题。
供参考:

public static void printMoviesByGenreForDirector(String[][] movieCinema, String director) {
    // Step 1: Find unique genres for the given director
    String[] directorGenres = Library.uniqueValues(search(movieCinema, director, 4, 3));
    String[] directorMovies = Library.uniqueValues(search(movieCinema, director, 4, 2));

    // Step 3: Print movies for each genre
    for (String genre : directorGenres) {
        System.out.println("Genre: " + genre);
        boolean foundMoviesInGenre = false;
        for (String movie : directorMovies) {
            int movieIndex = -1;
            for (int i = 0; i < movieCinema.length; i++) {
                if (director.equals(movieCinema[i][4]) && genre.equals(movieCinema[i][3])) {
                    movieIndex = i;
                    break;
                }
            }
            if (movieIndex != -1) {
                System.out.println(movieCinema[movieIndex][1]);
                foundMoviesInGenre = true;
            }
        }
        if (!foundMoviesInGenre) {
            System.out.println("No movies found in this genre for " + director);
        }
    }
}

字符串
您可以在main方法中使用特定的director名称调用此函数,如下所示:

public static void main(String[] args) {
    String[][] movieCinema = // Your 2D array containing movie data
    String director = "Christopher Nolan";
    printMoviesByGenreForDirector(movieCinema, director);
}


此功能将以所需格式打印给定导演的每个流派的电影。祝你好运!!!

3bygqnnd

3bygqnnd2#

感谢@janvi代码,我能够找到一个代码,把电影类型的特定导演。

public static void printMoviesByGenreForDirector(String[][] movieCinema, String director) {

                    // Step 1: Find unique genres for the given director
                    String[] directorGenres = Library.uniqueValues(search(movieCinema, director, 4, 3));
                    String[] directorMovies = Library.uniqueValues(search(movieCinema, director, 4, 2));

                    // Step 2: Print games for each category
                    for (int genreIndex = 0; genreIndex < directorGenres.length; genreIndex++) {
                        String genre = directorGenres[genreIndex];
                        System.out.println("\nGenre: " + genre);
                        boolean foundMoviesInGenre = false;
                        for (int i = 0; i < movieCinema.length; i++) {
                            if (director.equals(movieCinema[i][4]) && genre.equals(movieCinema[i][3])) {
                                System.out.println(movieCinema[i][2]);
                                foundMoviesInGenre = true;
                            }
                        }
                        if (foundMoviesInGenre == false) {
                            System.out.println("No games found in this genre for " + director);
                        }
                    }
                }

字符串

相关问题