2015-03-19 4 views
0

Я пытаюсь напечатать несколько информации из текстового файла, например, напечатать имяOfEmployee, hourlyRate, hoursWorked, taxRate, grossAmount, netAmount, но он только дает мне java.util.InputMismatchException и в консоли не все информация от сотрудника печатается только с именем, hourlyRate, hoursWorked, taxRate, также я хочу, чтобы Total all the grossAmount моих сотрудников.Сканирование из текстового файла

private static Scanner ian; 

    public static void main (String[]args) throws FileNotFoundException 
    { 
     Scan(); 
    } 

    public static void Scan() 
    { 
     try 
     { 
      ian = new Scanner(new File("payroll.dat")); 
     } 
     catch (IOException e)  
     { 
      e.printStackTrace(); 
     } 

     while(ian.hasNext()) 
     { 
      String a = ian.nextLine(); 
      int b = ian.nextInt(); 
      int c = ian.nextInt(); 
      int d = ian.nextInt(); 
      int e = ian.nextInt(); 
      int f = ian.nextInt(); 

      System.out.printf("a= ", a , "b= ", b , " c= ", c , " d= ", d , "e = ", e , "f = " ,f); 
     } 
    } 
} 
+0

Чтобы получить правильную причину исключения, вы должны обернуть свой код в '' try' и catch' блока, а не только во время класса Scanner конкретизации –

+0

Почти убедитесь, что вам не нужен ian.nextLine(), nextInt должен идти в новой строке сам по себе. Кроме того, вы уверены, что все значения являются int, а не десятичными? –

+1

Хорошо, что есть несоответствие между тем, что находится в файле, и тем, как вы его читаете! Но если вы не представите нам какой-то вклад, мы не можем вам сказать, почему. –

ответ

0

пожалуйста, обратитесь http://examples.javacodegeeks.com/core-java/lang/string/java-string-format-example/

Отредактированный код ... Полная подпись Printf является PRINTF (формат String, Object ... арг). Первый аргумент - это строка, которая описывает желаемое форматирование вывода. Оттуда printf может иметь несколько аргументов любого типа. Во время выполнения эти аргументы будут преобразованы в String и будут напечатаны в соответствии с инструкциями по форматированию.
1.% d для целых чисел и% s для строки:

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




public class readfile { 
    private static Scanner ian; 

    public static void main (String[]args) throws FileNotFoundException 
    { 
     Scan(); 
    } 

    public static void Scan() 
    { 
     try 
     { 
      ian = new Scanner(new File("demo.txt")); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 

     while(ian.hasNext()) 
     { 

      int b = ian.nextInt(); 
      int c = ian.nextInt(); 
      int d = ian.nextInt(); 
      int e = ian.nextInt(); 
      int f = ian.nextInt(); 
      String a = ian.nextLine(); 

      System.out.printf("a : %s, b : %d, c : %d ,d : %d ,e : %d, g : %d " ,a,b,c,d,e,f); 
     } 
    } 
} 
+0

a = : employeeName, это только дает мне не все подробности – unknown

+0

Теперь проверьте его..и отредактировал его..и работаю .. :))) –

+0

да он сейчас работает ха-ха! большое спасибо :)) – unknown

1

Попробуйте заменить PRINTF линии что-то вроде:

System.out.printf("a= %d b= %d c= %d d= %d e = %d f = %d" ,a,b,c,d,e,f); 

PRINTF взять в качестве первого аргумента формат String, а затем другой аргумент должен быть отформатирован в

http://docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html#printf(java.lang.String,%20java.lang.Object...)

+1

Да ,,, но это не то, что вызывает исключение. –

+0

Я попробовал это, но это единственный выход «a =» не все значения – unknown

0

Как о чтении из файла в стиле java 7?

public static void main(String[] arg) throws Exception { 
    try(Scanner scan = new Scanner(new File("payroll.dat"))){ 
     while(scan.hasNextLine()){ 
      // extract data here 
     } 
    } 
} 
+0

Это дает мне это исключение в потоке «main» java.lang.NullPointerException \t at Try.main (Try.java:17) – unknown

0

Из документов для Scannerhttp://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

nextLine(): «Прогресс этот сканер мимо текущей строки и возвращает вклад, который был пропущен.»

Вы проверяете, есть ли вход с hasNext(), но затем вы вызываете nextLine(), который пропустит (и вернет) всю следующую строку. Затем вы вызываете nextInt(), но после вашей последней строки целых чисел больше не будет.

Вы, вероятно, хотите что-то вроде этого:

while(ian.hasNextLine()) 
    { 
     int b = ian.nextInt(); 
     int c = ian.nextInt(); 
     int d = ian.nextInt(); 
     int e = ian.nextInt(); 
     int f = ian.nextInt(); 
     String a = ian.nextLine(); 

     System.out.printf("a= ", a , "b= ", b , " c= ", c , " d= ", d , "e = ", e , "f = " ,f); 
    } 
} 

, но это зависит от формата файла, который вы не разместил.

0

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

private static final double FULL_TIME = 40.0; 

static Scanner scanner = new Scanner(System.in); 

static String nameOfEmployee; 
static double hourlyRate; 
static double hoursWorked; 
static double taxRate; 
static double grossAmount = 0; 
static double netAmount = 0; 

static double TOtalGrossAmount = 0; 
static double TotalNetAmount = 0; 

private static Scanner ian; 



public static void main (String []args) throws IOException 

    { 

     Instructions(); 

     PayrollReport(); 

     printEmployeeInfo(nameOfEmployee, hourlyRate, hoursWorked, taxRate, grossAmount, netAmount); 

    } 



public static void Instructions() 

{ 
    System.out.println("\t\t\t\t\t\tInstructions for Payroll Report Program" + 
      "\n\t\t\t\tThis program calculates a paycheck for each employee." + 
      "\n\t\t\t\tA text file containing the following information will be created." + 
      "\n\t\t\t\tname, pay rate, hours worked, and tax percentage to be deducted"); 

    System.out.println("\n\t\t\t\tThe program will create a report in columnar format showing the " + 
      "\n\t\t\t\ttemployee name, hourly rate, number of worked, tax rate," + 
      "\n\t\t\t\tgross pay, and netpay."); 

    System.out.println("\n\t\t\t\tAfter all emplyoees are processed , totals will be displayed," + 
      "\n\t\t\t\tincluding total gross amount and total net pay."); 
} 

public static void PayrollReport() 
{ 
    { 
     System.out.println("\n\t\t\t\t\t\t\t\tPayroll Report "); 
     System.out.print(""); 

     System.out.print("\n\t\t\t\tEmployee Name " + " Hourly Rate " + " Hours Worked " + " Tax Rate " + " Gross Amount " + " Net Amount"); 

     System.out.print(""); 
     System.out.println("\n\t\t\t\t--------------- " + " ----------- " + " ------------" + " --------- " + " ----------- " + " -----------");   
    }  
} 

public static void printEmployeeInfo(String nameOfEmployee , double HourlyRate , double HoursWorked , 
     double TaxRate , double GrossAmount , double NetAmount) throws IOException 
    { 

     try 
      { 

      ian = new Scanner(new File("payroll.dat")); 

      } 

     catch (IOException e)  

     { 
      e.printStackTrace(); 
     } 


    while (ian.hasNext())  
    { 
     nameOfEmployee = ian.nextLine(); 
     HourlyRate = ian.nextInt(); 
     HoursWorked = ian.nextInt(); 
     TaxRate = ian.nextInt(); 
     GrossAmount = 0; 
     NetAmount = 0; 

     TOtalGrossAmount += GrossAmount ; 
     TotalNetAmount += NetAmount; 

     System.out.printf("%s %s %s %s %s %s \n" , "\t\t\t\t" , nameOfEmployee , " " 
       , HourlyRate , " " , HoursWorked , " " , TaxRate , GrossAmount, NetAmount);  
    } 

    System.out.printf(" " , TOtalGrossAmount + " " + TotalNetAmount); 

     ian.close(); 
    } 

}

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