2016-01-21 2 views
1
import java.util.Scanner; 
public class Average 
{ 
    public void Average() 
    { 
     Scanner in = (new Scanner("J:\\AP Comptuter Science\\Semester 2\\Exeptions\\13.1\\numbers.txt")); 
     try{ 
      String test = in.nextLine(); 
     } catch(NullPointerException i) { 
      System.out.println("Error: " + i.getMessage()); 
     } 

     int total = 0; 
     int counter = 0; 

     while(in.hasNextInt()){ 
      total = total + in.nextInt(); 
      counter++; 
     } 
     total = total/counter; 
     System.out.println(total); 
    } 
} 

У меня есть проект для моего класса AP Comp, и я выполнил работу в соответствии с примечаниями, но файл «числа» не читается и я получаю ответ 0, когда это должно быть огромное количество.Я не могу заставить Java читать мой текстовый документ

+2

Вы уверены, что этот путь? Неужели? 'Семестр 2'? –

+0

Проверьте интервал в пути сканера, например Scanner in = (новый сканер («J: \\ AP Comptuter Science \\ Semester2 \\ Exeptions \\ 13.1 \\ numbers.txt»)); – Arsaceus

+0

* «не читается» * Что это значит? Вы получили сообщение об ошибке? Как в .... деление на ноль, может быть? – Andreas

ответ

0

Во-первых, вы должны исправить свой путь, и, вероятно, положил его в том же каталоге, что и файлы классов. И вместо того, чтобы предоставить путь к сканеру, вы также должны предоставить ему файл. Это должно выглядеть примерно так.

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

public class Average 
    { 

     public void printAverage(){ 
      File file = new File(""J:\\AP Comptuter Science\\Semester 2\\Exeptions\\13.1\\numbers.txt""); 
      Scanner scan; 

      try { 
       scan = new Scanner(file); 
       int total = 0, counter = 0; 

       while(scan.hasNextInt()){ 
        System.out.println("loop"); 
        total = total + scan.nextInt(); 
        counter++; 

       } 
       if(counter != 0) 
        total = total/counter; 
       System.out.println(total); 

      } catch (FileNotFoundException e) { 
       e.printStackTrace(); 
      } 

     } 

    } 
+0

Я получаю сообщение об ошибке незарегистрированного java.io.FileNotFoundException; должен быть пойман или объявлен брошеном. Выделенная часть - Scanner in = (новый сканер (файл)); –

+0

Это означает, что путь неправильный. –

1
new Scanner("J:\\AP Comptuter Science\\Semester  2\\Exeptions\\13.1\\numbers.txt") 

Вы звоните Scanner(String source), который не читает файл; он сам сканирует строку.

Что вам нужно, это, вероятно, public Scanner(File source) следующим образом:

new Scanner(new File("J:\\AP Comptuter Science\\Semester  2\\Exeptions\\13.1\\numbers.txt")) 

Кроме того, необходимо проверить путь, почти наверняка не 5 пробелов между «Семестр» и «2»

Общая Я настоятельно призываю вас выполнить свой код в отладчике, а не просто работать. Если бы вы сделали это, вы бы увидели, что после выполнения

String test = in.nextLine(); 

Строка test содержит имя файла, а не его содержание.

Есть другие улучшения возможны, рассмотрим размещение в stackexchange после Просмотр Кода вы можете заставить его работать

+0

пять пробелов от меня форматирование файла, чтобы я мог опубликовать код. –

+0

Но что более важно, вы используете неправильный метод –

0

Как уже упоминалось ранее, код имеет несколько вопросов:

а) new Scanner(String) читает строку вместо файла

б) путь кажется неверным

с) обработка DivideByZero и FileNotFound исключений

См. Следующий код:

import java.io.FileNotFoundException; 
import java.util.Scanner; 
import java.io.File; 
public class Average{ 
    public void average(){ 
     Scanner in = null; 
     try{ 
      in = (new Scanner(new File("J:\\AP Comptuter Science\\Semester 2\\Exeptions\\13.1\\numbers.txt"))); 
      String test = in.nextLine(); 
     } 
     catch(NullPointerException | FileNotFoundException i){ 
      System.out.println("Error: " + i.getMessage()); 
     } 
     int total = 0; 
     int counter = 0; 
     while(in != null && in.hasNextInt()) 
     { 
      total = total + in.nextInt(); 
      counter++; 
     } 
     Float average = null; 
     if (counter > 0) { //to avoid divide by zero error 
      average = (float)total/counter; 
      System.out.println("Average: "+average); 
     } 
    } 

    public static void main(String args[]){ 
     new Average().average(); 
    } 
} 

Это работает только для numbers.txt который имеет целых числа, разделенных пробелом в соответствии с требованиями nextInt() методом Scanner класса.

+0

Огромное спасибо, что я понимаю, что мой ввод неправильный и почему он не работает сейчас, когда я сравнил эти два. –

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