2016-01-03 4 views
0

Итак, у меня есть задание из онлайн-курса, чтобы создать программу, которая может сканировать массивный документ. В этом документе содержится сотни пар букв, которые включают GB GG BB BG, и каждый набор из двух букв имеет свою собственную линию. Мне нужно выяснить, сколько строк есть, а затем выяснить, сколько из множества наборов двух букв есть. Я попытался выполнить код, но в настоящее время я застрял. Код, который я компилирую, но когда я запускаю его в BlueJ, окно вывода даже не появляется. Это то, что я до сих пор:Сканирование из текстового документа

/** 
* This program sorts through a file and 
* determines the composition of various families.     
* Timothy Pierce 
* 1/2/2016 
*/ 
import java.util.Scanner; 
import java.io.File; 
import java.io.IOException; 
public class Family 
{ 
    public static void main(String [ ] args) throws IOException 
    { 
     boolean isTwoBoys; 
     boolean isTwoGirls; 
     boolean isBoyGirl; 
     int twoBoysCounter = 1; 
     int twoGirlsCounter = 1; 
     int boyGirlCounter = 1; 

     String line = ""; 
     Scanner inFile = new Scanner(new File ("C:\\Users\\TEM\\Desktop\\Projects\\Family\\Document\\test1.txt")); 
     while (inFile.hasNextLine()) 
     { 
      isTwoBoys = (line.equals("BB")); 
      isTwoGirls = (line.equals("GG")); 
      isBoyGirl = (line.equals("BG")||line.equals("GB")); 
      if(isTwoBoys) 
      { 
      twoBoysCounter++; 
      } 
      else if(isTwoGirls) 
      { 
      twoGirlsCounter++; 
      } 
      else if(isBoyGirl) 
      { 
      boyGirlCounter++; 
      } 
     } 
     System.out.println(); 
     System.out.println("Two Boys: " + twoBoysCounter); 
     System.out.println("One Boy One Girl: " + boyGirlCounter); 
     System.out.println("Two Girls: " + twoGirlsCounter); 
     inFile.close(); 
    } 
} 

Я пытался в течение нескольких часов, но я не могу показаться, чтобы заставить его работать. Я даже не смог подсчитать, сколько строк есть. Любая помощь будет очень оценена! Благодаря!

+0

ваш оператор цикла while в порядке, я пересмотрел комментарий. плохо сообщите правильный ответ ниже. –

+0

@ DanielNetzer Не хотите ли вы зацикливать, пока файл имеет следующую строку? –

+0

«Линия» когда-либо была установлена ​​на что-либо после ее инициализации? –

ответ

2

Вы никогда не читали следующую строку, так что вы застряли в бесконечной петле, пока

0

Я полагаю, что вы смотрите в Files.readAllLines функции для этого случая. Он загружает все строки в списке, по которому вы можете легко перебирать и делать то, что вам нужно.

Пример: Files.readAllLines(Paths.get("C:\\Users\\TEM\\Desktop\\Projects\\Family\\Document\\test1.txt", Charsets.default()) загрузит то, что вам нужно

0

ваш цикл в то время как это inifinite, как указано выше, так как inFile.hasNextLine() является логическое выражение, которое возвращает истинным или ложным, но это не заранее сканер к следующей строке, вам нужно добавить к каждому из утверждений, если это через:

inFile.nextLine() //advance the inputstream 
0

Пропустив через «не readNextLine» вопрос указывал другим, ваш основной метод ужасен.

Использование карты < строка, целое число >. Сохраните пару символов в качестве ключа. Каждый раз, когда вы читаете новую пару, пытается извлечь ее с карты. Если вы получите нуль, то пара еще не имеет счетчика, , поэтому сохраните 1 в качестве значения. Если вы получите ненулевое значение, добавьте 1 и сохраните новый счетчик.

Когда закончите читать, , у вас есть карта пар символов в количестве раз встречающихся.

+0

Я вижу, что вы говорите здесь, и что проблема вызывает бесконечный цикл, потому что я объявляю String line = "", который является всем документом, поэтому он никогда не будет работать. Я не изучил метод выше вас, хотя я не уверен, как это сделать. –

Смежные вопросы