Данные, прочитанные из файла, не работающего в методе пузырьковой сортировки - PullRequest
0 голосов
/ 10 апреля 2020

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

{
    Scanner in = new Scanner (System.in);

    //Error trap
    while (true)
    {
        System.out.println ("Which sorting method would you like to use? (Type bubble for Bubble Sort or insert for Insertion Sort)");
        String sort = in.nextLine ();

        if (sort.equalsIgnoreCase ("bubble"))
        {
            bubble (args, args, args, args, args);
        }
        if (sort.equalsIgnoreCase ("insert"))
        {
            insert ();
        }
        else
        {
            System.out.println ("Please enter the correct data.");
        }
    }
}

public static void readfile () throws IOException
{
    //Declaring variables
    String fileName, fnameTemp, lnameTemp, cityTemp, ageTemp, emailTemp;
    int howMany = 0;

    Scanner in = new Scanner (System.in);

    System.out.println ("Enter the file name:");
    fileName = in.nextLine ();

    BufferedReader input;
    input = new BufferedReader (new FileReader (fileName));

    fnameTemp = input.readLine ();
    lnameTemp = input.readLine ();
    cityTemp = input.readLine ();
    ageTemp = input.readLine ();
    emailTemp = input.readLine ();

    //Reading data until end of the file to determine the number of records
    while (fnameTemp!= null)
    {
        howMany++;
        fnameTemp = input.readLine ();
        lnameTemp = input.readLine ();
        cityTemp = input.readLine ();
        ageTemp = input.readLine ();
        emailTemp = input.readLine ();
    }

    input.close ();
    input = new BufferedReader (new FileReader (fileName));

    String fname [] = new String [howMany];
    String lname [] = new String [howMany];
    String city [] = new String [howMany];
    String age [] = new String [howMany];
    String email [] = new String [howMany];

    for (int count = 0; count < howMany; count++)
    {
        fname [count] = input.readLine ();
        lname [count] = input.readLine ();
        city [count] = input.readLine ();
        age [count] = input.readLine ();
        email [count] = input.readLine ();
    }

    input.close ();

    for (int count = 0; count < howMany; count++)
    {
        //System.out.println (fname [count]);
        //System.out.println (lname [count]);
        //System.out.println (city [count]);
        //System.out.println (age [count]);
        //System.out.println (email [count]);
    }
}

public static void bubble (String fname [], String lname [], String city [], String age [], String email []) throws IOException
{
    String temp, temp2, temp3, temp4, temp5;
    int howMany = 0;

    readfile ();

    Scanner in = new Scanner (System.in);

    System.out.println ("Which item would you like to sort?");
    System.out.println ("Type firstname, lastname, city, age, or email to choose.");
    String item = in.nextLine ();

    if (item.equalsIgnoreCase ("firstname"))
        {
            for (int i = 1; i <= howMany; i++)
            {
                for (int j = 0; j < howMany; j++)
                {
                    if (fname [j].compareToIgnoreCase (fname [j + 1]) > 0)
                    {
                    temp = fname [j];
                    fname [j] = fname [j + 1];
                    fname [j + 1] = temp;

                    temp2 = lname [j];
                    lname [j] = lname [j + 1];
                    lname [j + 1] = temp2;

                    temp3 = city [j];
                    city [j] = city [j + 1];
                    city [j + 1] = temp3;

                    temp4 = age [j];
                    age [j] = age [j + 1];
                    age [j + 1] = temp4;

                    temp5 = email [j];
                    email [j] = email [j + 1];
                    email [j + 1] = temp5;

                    System.out.println (fname [i]);
                    System.out.println (lname [i]);
                    System.out.println (city [i]);
                    System.out.println (age [i]);
                    System.out.println (email [i]);

                    System.out.println ("Sorted");
                    }
                }
            }
        }

Просто примечание, которое никогда не пропадет (int i = 1; i <= howMany; i ++) </p>

В моем текстовом файле есть фрагмент данных на каждой строке, идущей от имени, фамилии, города, возраста и адреса электронной почты.

Любая помощь будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 10 апреля 2020

Ну, во-первых, причина, по которой он не достигает этой точки, заключается в том, что вы инициализируете howMany равным 0 и никогда не меняете его, поэтому для l oop инициализируется значение i, равное 1, что больше, чем howMany, и затем никогда выполняется. Я также немного сбит с толку, потому что вы говорите, что хотите использовать данные из файла, но затем в основном вы передаете аргументы командной строки своей функции. Чтобы исправить

, я лично использовал бы файл .csv для хранения информации, так как, на мой взгляд, с ними легче работать.

В любом случае, вот некоторый код (с использованием .csv, но это было бы довольно легко изменить для чего угодно), который получит данные файла и передаст их пузырьковой сортировке. Я ничего не делал с методом сортировки:

public static void main(String[] args) {
    try {
        String[] users = readFile("C:\\Users\\vikin\\OneDrive\\Desktop\\data.csv");
        for(String s : users) {
            System.out.println(s);
        }
        bubble(users);
    } catch(IOException e) {
        e.printStackTrace();
    }
}

public static String[] readFile(String fileName) throws IOException {
    Scanner scanner = new Scanner(new File(fileName));
    ArrayList<String> data = new ArrayList<>();
    while(scanner.hasNext()) {
        //String[] split = scanner.nextLine().split(",");
        //Collections.addAll(data, split);
        data.add(scanner.nextLine());
    }

    String[] users = new String[data.size()];
    for(int i = 0; i < data.size(); i++) {
        users[i] = data.get(i);
    }

    return users;
}

public static void bubble (String[] data) throws IOException
{
    String temp, temp2, temp3, temp4, temp5;

    Scanner in = new Scanner (System.in);

    String[] fname = new String[data.length];
    String[] lname = new String[data.length];
    String[] city = new String[data.length];
    String[] age = new String[data.length];
    String[] email = new String[data.length];
    for(int i = 0; i < data.length; i++) {
        String[] s = data[i].split(",");
        fname[i] = s[0];
        lname[i] = s[1];
        city[i] = s[2];
        age[i] = s[3];
        email[i] = s[4];
    }
    //rest of sort here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...