2015-06-29 5 views
-3

Я пытаюсь сделать этот цикл файлов, но я продолжаю получать ошибку в последнем if if (отмечен стрелкой).Я не могу понять, почему моя программа не зацикливается

Программа должна читать в файле с первой строкой, являющейся именем клиента.
Во второй строке первое число - это количество деревьев, которые нужно удалить (150 на дерево), второе число - обрезка дерева (50 в час).
Третья строка - это все пни, подлежащие удалению, и их диаметр (одно число - один культи, а также его диаметр).

Это файл, который предполагается читать (http://pastebin.com/gXkujcaM).

public class Prog_5 { 

    public static void main(String[] args) throws FileNotFoundException { 
     String name = "Joe"; 
     double trees = 0; 
     double treeTrimming = 0; 
     double stumpInches = 0; 
     double stumpTotal = 0; 
     double total = 0; 
     double totalRev = 0; 

     Scanner in = new Scanner(System.in); 
     System.out.print("Input file: "); 
     String inputFile = in.nextLine(); 

     System.out.print("Output file: "); 
     String outputFile = in.nextLine(); 
     in.close(); 

     File input = new File(inputFile); 
     in = new Scanner(input); 
     PrintWriter output = new PrintWriter(outputFile); 

     while(in.hasNext()){ 

     name = in.nextLine(); 
     output.println("Customer: " + name); 
     System.out.println("Customer: " + name); 

     trees = in.nextDouble(); 
     trees *= 150; 
     output.println("Tree Removal: $" + trees); 
     System.out.println("Tree Removal: $" + trees); 

     treeTrimming = in.nextDouble(); 
     treeTrimming *= 50; 
     output.println("Tree Trimming: $" + treeTrimming); 
     System.out.println("Tree Trimming: $" + treeTrimming); 

     while (in.hasNextDouble()) { 
      stumpInches = in.nextDouble(); 
      if (stumpInches != -1) { 
       stumpTotal = stumpTotal + 30; 
       if (stumpInches > 12) { 
        stumpInches -= 12; 
        stumpInches *= 2; 
       } 
       stumpTotal += stumpInches; 
      } 

     } 
     output.println("Stump Removal: $" + stumpTotal); 
     System.out.println("Stump Removal: $" + stumpTotal); 

     total = (trees + treeTrimming + stumpTotal); 
     output.println("Total: $" + total); 
     System.out.println("Total: $" + total); 

     totalRev += total; 
     stumpTotal = 0; 
     trees = 0; 
     treeTrimming = 0; 

     if(in.hasNext()); 
      in.next(); 
     } 

     output.close(); 

    } 

} 
+3

просьба сообщить точную ошибку вы получаете – Rash

+0

исключение в потоке "главный" java.util.NoSuchElementException \t в java.util.Scanner.throwFor (Unknown Source) \t в java.util .Scanner.next (Неизвестный источник) \t на Prog_5.main (Prog_5.java:76) –

ответ

0

это ваш if loop is problem. вы должны написать его, как показано ниже. но вы его прекратили;

if(in.hasNext()){ 
     in.next(); 
     } 

поэтому он будет продолжать бросать nosuchelement исключение каждый раз, если она достигает EOF

+0

Wow. Я не могу поверить, что я пропустил это. Благодарю. Прекрасно работает. –

0

Там нет необходимости внешнесферных во время цикла, если условие в конце. Внутренние петли заботятся о том, что ваша программа предназначена для выполнения. PFB исправленный код:

import java.io.*; 
import java.util.Scanner; 

public class Prog_5 { 

    public static void main(String[] args) throws FileNotFoundException { 
     String name = "Joe"; 
     double trees = 0; 
     double treeTrimming = 0; 
     double stumpInches = 0; 
     double stumpTotal = 0; 
     double total = 0; 
     double totalRev = 0; 

     Scanner in = new Scanner(System.in); 
     System.out.print("Input file: "); 
     String inputFile = in.nextLine(); 

     System.out.print("Output file: "); 
     String outputFile = in.nextLine(); 
     in.close(); 

     File input = new File(inputFile); 
     in = new Scanner(input); 
     PrintWriter output = new PrintWriter(outputFile); 

     // while (in.hasNext()) { 

     name = in.nextLine(); 
     output.println("Customer: " + name); 
     System.out.println("Customer: " + name); 

     trees = in.nextDouble(); 
     trees *= 150; 
     output.println("Tree Removal: $" + trees); 
     System.out.println("Tree Removal: $" + trees); 

     treeTrimming = in.nextDouble(); 
     treeTrimming *= 50; 
     output.println("Tree Trimming: $" + treeTrimming); 
     System.out.println("Tree Trimming: $" + treeTrimming); 

     while (in.hasNextDouble()) { 
      stumpInches = in.nextDouble(); 
      if (stumpInches != -1) { 
       stumpTotal = stumpTotal + 30; 
       if (stumpInches > 12) { 
        stumpInches -= 12; 
        stumpInches *= 2; 
       } 
       stumpTotal += stumpInches; 
      } 

     } 
     output.println("Stump Removal: $" + stumpTotal); 
     System.out.println("Stump Removal: $" + stumpTotal); 

     total = (trees + treeTrimming + stumpTotal); 
     output.println("Total: $" + total); 
     System.out.println("Total: $" + total); 

     totalRev += total; 
     stumpTotal = 0; 
     trees = 0; 
     treeTrimming = 0; 

     // if (in.hasNext()) 
     // ; 
     // in.next(); 
     // } 
     in.close(); 
     output.close(); 

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