Я пытаюсь (просто сделать рейтинг фильмов более простым; сравнивать фильм, который вы добавляете с каждым другим фильмом в списке, чтобы узнать, где он подходит, сложно и не очень эффективно) сделатьпрограмма, которая работает как binary insertion sort
, чтобы добавить фильм в список других фильмов в правильном порядке.В разделе, определяющем место в списке, куда должен идти фильм, я получаю сообщение об ошибке
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Unknown Source)
at Rater.binarySearch(Rater.java:32)
at Rater.main(Rater.java:24)
Я не уверен, что является причиной этого.Код ниже:
import java.awt.List;
import java.io.*;
import java.util.ArrayList;
import java.util.Scanner;
public class Rater
{
public static void main(String[] args)throws Exception
{
File file = new File("E:\\topmovies.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
String st;
ArrayList<String> movList = new ArrayList<String>();
while ((st = br.readLine()) != null) {
movList.add(st);
}
br.close();
while(true) {
System.out.println("Enter a movie to add.");
Scanner myObj = new Scanner(System.in);
String userName = myObj.nextLine();
myObj.close();
int index = binarySearch(movList, userName, 0, movList.size()-1);
movList.add(index, userName);
}
}
static int binarySearch(ArrayList<String> a, String item, int low, int high)
{
Scanner myObj3 = new Scanner(System.in);
if (high <= low) {
System.out.println("Did you like " + item + " more than " + a.get(low) + "?");
String answer2 = myObj3.nextLine().toLowerCase();
myObj3.close();
if(answer2.equals("yes")) {
return low + 1;
}
return low;
}
int mid = (low + high)/2;
if(item == a.get(mid)) {
myObj3.close();
return mid+1;
}
System.out.println("Did you like " + item + " more than " + a.get(mid) + "?");
String answer2 = "";
if(myObj3.hasNextLine()){
answer2 = myObj3.nextLine().toLowerCase();
}
myObj3.close();
if(answer2.equals("yes")) {
return binarySearch(a, item, mid+1, high);
}
return binarySearch(a, item, low, mid-1);
}
}
Пожалуйста, игнорируйте плохие соглашения об именах и тот факт, что это, возможно, еще не делает то, что должно делать.Сейчас я просто пытаюсь исправить этот сканер не работает.