2015-08-12 3 views
1

Я пытаюсь прочитать файл и определить, сколько чисел (разделенных пробелами) есть в строке. Если есть один номер, то это число задается как радиус круга, и создается объект окружности этого радиуса. Аналогичные действия выполняются с двумя значениями (прямоугольник) и тремя значениями (треугольник).Java - чтение двоичного текста из текстового файла

Я считаю, что ошибка, которую я получаю, возникает из-за проблемы с моим кодом, который принимает числа из текстового файла, которые являются строками, и преобразует их в двойные, используя valueOf в строке 27 моего класса драйвера.

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

Exception in thread "main" java.lang.NumberFormatException: For input string: "in7.txt" 
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) 
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) 
    at java.lang.Double.parseDouble(Double.java:538) 
    at java.lang.Double.valueOf(Double.java:502) 
    at Assignment7.main(Assignment7.java:27) 

Вот мой класс драйвера:

import java.util.*; 
import java.io.*; 
public class Assignment7 
{ 
    public static void main(String[] theArgs) 
    { 
     String filename = "in7.txt"; 
     int shapeNum; 
     List<Double> shapeValues = new ArrayList<Double>(); 
     Shape myShape; 
     double d; 
     Scanner s = new Scanner(filename); 
     try 
     { 
     if (!s.hasNextLine()) 
     { 
      throw new FileNotFoundException("No file was found!"); 
     } 
     else 
     { 
      while (s.hasNextLine()) 
      { 
       shapeNum = 0; 
       Scanner s2 = new Scanner(s.nextLine()); 
       while (s2.hasNext()) 
       { 
        d = Double.valueOf(s2.next()); 
        shapeNum++; 
        shapeValues.add(d); 
       } 
       if (shapeNum == 1) 
       { 
        myShape = new Circle(shapeValues.get(0)); 
       } 
       else if (shapeNum == 2) 
       { 
        myShape = new Rectangle(shapeValues.get(0), 
        shapeValues.get(1)); 
       } 
       else 
       { 
        myShape = new Triangle(shapeValues.get(0), 
        shapeValues.get(1), shapeValues.get(2)); 
       } 
       shapeValues.clear(); 
       System.out.println(myShape); 
      } 
     } 
     s.close(); 
     } 
     catch (FileNotFoundException e) 
     { 
     System.out.println("File not found!" + e); 
     } 
    } 
} 

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

+0

новый сканер() не принимает имя файла. Вы просто обрабатываете имя файла как строку, а не содержимое файла. – ccleve

ответ

3

вы должны передать файл сканеру. как этот

File filename = new File("in7.txt"); 
Scanner s = new Scanner(filename); 

В настоящее время вы передаете строку in7.txt, и именно поэтому вы получите ошибку

NumberFormatException: For input string: "in7.txt" 
+0

Теперь я вижу, единственная проблема с этим - теперь я получаю новую ошибку. Не могли бы вы узнать, почему я получаю 'Assignment7.java:12: ошибка: незарегистрированное исключение FileNotFoundException; должен быть пойман или объявлен брошенным? " – Trafton

+0

@Trafton вы должны обработать исключение filenotfound .put try catch catch –

+0

это означает 'Сканер s = новый сканер (имя файла);' throws a FileNotFoundException'. Вы должны «поймать» его или «бросить» его – jmcg

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