2013-10-02 3 views
3

Я пытался сделать эту проблему для своей школьной работы и для жизни меня не могу понять. Проблема заключается в следующем: напишите программу, которая читается в файле «work_example_1/babynames.txt» и создаст два файла: boynames.txt и girlnames.txt, разделяющие данные для мальчиков и девочек.Прочтите из 1 файла, чтобы создать 2 файла

Это код из Работали Пример 11 из wiley.com/go/javaexamples этой проблемы:

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

public class BabyNames 
{ 
public static final double LIMIT = 50; 

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

    RecordReader boys = new RecordReader(LIMIT); 
    RecordReader girls = new RecordReader(LIMIT); 

    while (boys.hasMore() || girls.hasMore()) 
    { 
     int rank = in.nextInt(); 
     System.out.print(rank + " "); 
     boys.process(in); 
     girls.process(in); 
     System.out.println(); 
    } 

    in.close(); 
} 
} 

И это:

import java.util.Scanner; 

public class RecordReader 
{ 
private double total; 
private double limit; 

public RecordReader(double aLimit) 
{ 
    total = 0; 
    limit = aLimit; 
} 

public void process(Scanner in) 
{ 
    String name = in.next(); 
    int count = in.nextInt(); 
    double percent = in.nextDouble(); 

    if (total < limit) 
    { 
     System.out.print(name + " "); 
    } 

    total = total + percent; 
} 

public boolean hasMore() 
{ 
    return total < limit; 
} 
} 

Я создал babynames.txt и положить в в той же папке src, что и в файле .java, он появляется с файлом, который не найден, если я даю прямой путь к файлу с

Scanner in = new Scanner(new File("C:/Users/me/SkyDrive/Schoolwork/CIS150AB/Chapter 11.1/src/babynames.txt")); 

он находит файл, но дает мне эту ошибку:

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at BabyNames.main(BabyNames.java:20) 

Для меня это выглядит как эта ошибка из-за линии 20, где ИНТ ранг = in.nextInt(); и он ищет строку при поиске int, но это прямо с веб-сайта Wiley, поэтому я не уверен.

Любая помощь с этим была бы оценена, по-видимому, я не предназначен для онлайн-классов для Java. Следующий класс я беру в школу, когда есть один, который работает вокруг моего графика.

+3

Возможно, вы ошиблись в файле 'babynames.txt'. Можете ли вы его предоставить? Кроме того, не отчаивайтесь от такой небольшой ошибки. Простой ввод-вывод в Java может быть немного сложным, но вы можете привыкнуть к нему с небольшой практикой. – sushain97

+0

Проблема заключается в том, что он просит взять информацию о babynames с веб-сайта, а на веб-сайте Big Java: Early Objects 5th Edition, и он рассказывает вам получить текстовый файл из книги. Книга в моем классе - это Java Concepts: Early Objects 7-е издание. Поэтому я нашел файл babynames.txt онлайн, в текстовом файле должны быть самые популярные имена детей и рейтинг имени ребенка. Я приложу файл, который я нашел. https://skydrive.live.com/redir?resid=F544BAADAAC526E5!26857&authkey=!AMw7rMHPTO3T720 –

+0

Ваш файл очень большой и немного громоздкий для работы. Общей методикой при исправлении ошибок в коде является то, что ваша проблема сводится к тому, что легче диагностировать и более уверенно будет работать. Итак, попробуйте создать новый текстовый файл с несколькими именами и посмотреть, как работает ваш код. – sushain97

ответ

0

Если this - это формат вашего babynames.txt, это то, что произойдет (я думаю, не пробовал).

  • Сканер "в" читает первый Int в "ранге" (OK)
  • Введите в boys.process()
    • "в" считывает имя (Jacob)
    • " в»пытается прочитать первый Int (1), но находит 1.0013, который не является ИНТ

Этот сценарий не соответствует вашей ошибки (вы получите StackTrace от записи Читатель, а не от BabyNames), но, возможно, линия мышления будет работать на вас.

Попробуйте его с помощью отладчика. Если вы не можете, используйте in.next(), а не in.nextInt() или in.nextDouble(). Вы можете распечатать значение и посмотреть, почему это не так, как вы думаете.

Ваш вопрос на самом деле вызывает два вопроса. Ответ на скрытый может быть:

try (InputStream inputStream = BabyNames.class.getResourceAsStream("/babynames.txt"); 
    Scanner in = new Scanner(inputStream)) 
{ 
    // do stuff with in 
} 
Смежные вопросы