Проблема в чтении ввода от пользователя и записи в файл в Java - PullRequest
0 голосов
/ 13 марта 2020

Это базовый класс Код сотрудника

public class Employee {
    private String name;
    private int age;
    private String address;
    private String EmpId;
    private double salary;

    public Employee(String name,int age,String address,String EmpId,double salary)  {
        this.name=name;
        this.age=age;
        this.address=address;
        this.EmpId=EmpId;
        this.salary=salary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getEmpId() {
        return EmpId;
    }

    public void setEmpId(String empId) {
        EmpId = empId;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

Здесь сотрудник программного обеспечения расширяет этот базовый класс

public class SoftwareEmployee extends Employee{
    private String skillSet;
    public SoftwareEmployee(String name,int age,String address,String EmpId,double salary,String 
    skillSet) {
        super(name,age,address,EmpId,salary);
        this.skillSet=skillSet;
    }

    public String getSkillSet() {
        return skillSet;
    }

    public void setSkillSet(String skillSet) {
        this.skillSet = skillSet;
    }

}

Также Сотрудник финансового отдела расширяет базовый класс, код которого:

public class FinanceEmployee extends Employee {
    private String Degree;
    public FinanceEmployee(String name,int age,String address,String EmpId,double salary,String Degree) {
        super(name,age,address,EmpId,salary);
        this.Degree=Degree;
    }

    public String getDegree() {
        return Degree;
    }

    public void setDegree(String degree) {
        Degree = degree;
    }   
}

Здесь невозможно выполнить запись во внешний файл. Также консоль не ждет, когда я введу имя, а затем возраст. Это просто печать имени и возраста одновременно, а затем снова две вещи одновременно. Я очень новичок в этом.

Это мой основной класс

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Scanner;


public class Main {

    public static void main(String[] args) throws IOException  {
        Scanner sc = new Scanner(System.in);
        //File file = new File("C:\\Users\\AK078479\\Documents\\newfile.txt");
        FileWriter fWriter = new FileWriter("C:\\Users\\AK078479\\Documents\\newfile.txt");
        //BufferedWriter writer = null;

        Employee employee=new Employee(null, 0, null, null, 0);
        SoftwareEmployee sftemp=new SoftwareEmployee(null, 0, null, null, 0, null);
        FinanceEmployee fncemp=new FinanceEmployee(null, 0, null, null, 0, null);
        System.out.println("You are "+"\n"+"1.Reviewer"+"\n"+"2.Data Entry Operator");
        int choice = sc.nextInt();
        switch(choice) {
            case(1): 
                System.out.println("Do you want to see a"+ "\n" + "1.Particular record"+"\n"+"2.All 
         records");
                int value=sc.nextInt();
                switch(value) {
                    case(1):
                }
                break;
            case(2):
                System.out.println("Employee is a "+"\n"+"1.Software Employee"+"\n"+"2.Finance 
      Employee");
                int num =sc.nextInt();
                switch(num) {
                    case(2):
                        try {

                            //String s="Finance Employee";
                            //writer.write(s);
                            //writer.newLine();
                            int n=2;
                            while(n>0) {

                                //writer = new BufferedWriter(fWriter);
                                System.out.println("Enter name");
                                String text = sc.next();
                                fncemp.setName(text);
                                fWriter.write(text);
                                //fWriter.newLine();
                                System.out.println("Enter age");
                                int age=sc.nextInt();
                                fncemp.setAge(age);
                                fWriter.write(age);
                                //writer.newLine();
                                System.out.println("Enter address");
                                String add = sc.nextLine();
                                fncemp.setAddress(add);
                                fWriter.write(add);
                                //fwriter.newLine();
                                System.out.println("Enter EmpId");
                                String emplId = sc.nextLine();
                                fncemp.setEmpId(emplId);
                                fWriter.write(emplId);
                                //writer.newLine();
                                System.out.println("Enter salary");
                                double sal = sc.nextDouble();
                                fncemp.setSalary(sal);
                                fWriter.write((int) sal);
                                //writer.newLine();
                                System.out.println("Enter degree");
                                String degree = sc.nextLine();
                                fncemp.setDegree(degree);
                                fWriter.write(degree);
                                //writer.newLine();  
                                n--;
                            }      
                        } catch (Exception e) {
                            System.out.println("Error!");
                        }
                    break;
                    case(1):
                        try {

                            //String st="Software Employee";
                            //writer.write(st);
                           // writer.newLine();
                            int n=2;
                            while(n>0) {

                                //fWriter = new FileWriter(file);
                                //writer = new BufferedWriter(fWriter);
                                System.out.println("Enter name");
                                //String text = sc.nextLine();
                                sftemp.setName(sc.nextLine());
                                fWriter.write(sftemp.getName());
                                //fWriter.newLine();
                                System.out.println("Enter age");
                                int age=sc.nextInt();
                                sftemp.setAge(age);
                                fWriter.write(age);
                                //fWriter.newLine();
                                System.out.println("Enter address");
                                String add = sc.nextLine();
                                sftemp.setAddress(add);
                                fWriter.write(add);
                                //writer.newLine();
                                System.out.println("Enter EmpId");
                                String emplId = sc.nextLine();
                                sftemp.setEmpId(emplId);
                                fWriter.write(emplId);
                                //writer.newLine();
                                System.out.println("Enter salary");
                                double sal = sc.nextDouble();
                                sftemp.setSalary(sal);
                                fWriter.write((int) sal);
                                //writer.newLine();
                                System.out.println("Enter skill Set");
                                String skill = sc.nextLine();
                                sftemp.setSkillSet(skill);
                                fWriter.write(skill);
                                //writer.newLine();  
                                n--;
                            }      
                        } catch (Exception e) {
                            System.out.println("Error!");
                        }
                    break;
                    default:
                        System.out.println("Try again");

                }
                break;
                default:
                    System.out.println("Try again");

        }
    }
}

1 Ответ

2 голосов
/ 13 марта 2020

После того, как вы используете метод сканера nextInt(), вы должны вызвать nextLine() еще раз, прежде чем сможете прочитать строку. Причина этого заключается в том, что после вызова nextInt внутренний курсор сканера, который отслеживает вашу позицию во входном потоке, передает целое число, но останавливается прямо перед символом новой строки. Когда вы вызываете nextLine(), сканер просто возвращает пустую строку и переходит на следующую строку, поэтому только следующий вызов nextLine() возвратит непустую строку, которую вы ввели после номера. Таким образом, например, здесь:

System.out.println("You are "+"\n"+"1.Reviewer"+"\n"+"2.Data Entry Operator");
int choice = sc.nextInt();
switch(choice) 

необходимо добавить:

System.out.println("You are "+"\n"+"1.Reviewer"+"\n"+"2.Data Entry Operator");
int choice = sc.nextInt();
sc.nextLine();   // Skip the end of line and prepare to read something from the next line
switch(choice)  
...