Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.11.2014, 17:57   #1
dimongusev
Новичок
Джуниор
 
Регистрация: 02.11.2014
Сообщений: 3
По умолчанию Поменять соседние элементы местами из файла

Всем привет. Ребят, нужно поменять местами соседние элементы из файла местами.
Код есть, вроде все верно, но что-то не тянет. Помогите кто знает)
Код:
package Asd;
import java.util.*;
import java.io .*;
 
/**
 *
 * @author anon
 */
public class Asd {
    /**
     * read lenght of array and all elemens of array from the file 
     * @param F - the file for reading
     * @return the new array read from the file
     */
    public static int[] createArray(File F) {
        Scanner sc;
        int mas[] = {};
        try {
            sc = new Scanner(F);
            int n = readInt(sc);
            mas = new int[n];
            for(int i = 0; i < n; i++)
                mas[i] = readInt(sc);
            sc.close();
        } catch(FileNotFoundException ex) {
            System.out.println("Файл с данными для чтения не найден");
            System.exit(0);
        }
        return mas;
    }
    /**
     * Read integer number from the file or exit the program otherwise
     * @param sc - the file for reading
     * @return integer number
     */
    public static int readInt(Scanner sc) {
        try {
            return sc.nextInt();
        } catch(InputMismatchException e) {
            System.out.println("Error in the source file:" 
                    + " array size is incorrectly written.");
            System.exit(0);
            return 0;
        } catch(NoSuchElementException e) {
            System.out.println("Not enough elements in file.");
            System.exit(0);
            return 0;
        } 
    }
    public static void change(int mas[]){
        for(int a, i = 1; i < mas.length; i++) {
            a = mas[i];
            mas[i] = mas[i-1];
            mas[i-1] = a;
         }
        for (int i=0; i<mas.length; i++){
            System.out.println(mas[i] + " ");
        }
    }
    public static void main(String[] args) {
        if (args.length < 1) {
            System.out.println("No file for reading"); 
            return;
        }
        int mas[] = createArray(new File(args[0]));
        change(mas);
        
    }
}

Последний раз редактировалось Stilet; 02.11.2014 в 18:40.
dimongusev вне форума Ответить с цитированием
Старый 02.11.2014, 19:39   #2
ultimatet41
Форумчанин
 
Аватар для ultimatet41
 
Регистрация: 08.04.2012
Сообщений: 104
По умолчанию

Цитата:
Код:
for(int a, i = 1; i < mas.length; i++) {
            a = mas[i];
            mas[i] = mas[i-1];
            mas[i-1] = a;
         }
Возможно этот участок кода не верный т.к. не меняет местами пары, а перемещает первый элемент в низ.
Правильно будет так:
Код:
 for(int a, i = 1; i < mas.length; i+=2) {
            a = mas[i];
            mas[i] = mas[i-1];
            mas[i-1] = a;
        }
Но для корректной работы программы массив должен быть чётным т.е. перед циклом нужно выполнить проверку:
Код:
 if ((mas.length % 2) == 0) {
            for (int a, i = 1; i < mas.length; i += 2) {
                a = mas[i];
                mas[i] = mas[i - 1];
                mas[i - 1] = a;
            }
        }
        else {
            System.out.println("Не чётный");
        }
Хотя есть вероятность, что я не до конца вас понял.
ultimatet41 вне форума Ответить с цитированием
Старый 02.11.2014, 22:18   #3
dimongusev
Новичок
Джуниор
 
Регистрация: 02.11.2014
Сообщений: 3
По умолчанию

Цитата:
Сообщение от ultimatet41 Посмотреть сообщение
Возможно этот участок кода не верный т.к. не меняет местами пары, а перемещает первый элемент в низ.
Правильно будет так:
Код:
 for(int a, i = 1; i < mas.length; i+=2) {
            a = mas[i];
            mas[i] = mas[i-1];
            mas[i-1] = a;
        }
Но для корректной работы программы массив должен быть чётным т.е. перед циклом нужно выполнить проверку:
Код:
 if ((mas.length % 2) == 0) {
            for (int a, i = 1; i < mas.length; i += 2) {
                a = mas[i];
                mas[i] = mas[i - 1];
                mas[i - 1] = a;
            }
        }
        else {
            System.out.println("Не чётный");
        }
Хотя есть вероятность, что я не до конца вас понял.
Нее, нужно из 12345-23451...так сказать переместить 1 элемент в конец, но прога выводит 2 элемент, и все
dimongusev вне форума Ответить с цитированием
Старый 02.11.2014, 22:43   #4
ultimatet41
Форумчанин
 
Аватар для ultimatet41
 
Регистрация: 08.04.2012
Сообщений: 104
По умолчанию

Какого типа файл должен читаться бинарного или текстового? Вернее как он должен читаться, как бинарник или как текстовый?

Последний раз редактировалось ultimatet41; 02.11.2014 в 22:46.
ultimatet41 вне форума Ответить с цитированием
Старый 02.11.2014, 23:24   #5
dimongusev
Новичок
Джуниор
 
Регистрация: 02.11.2014
Сообщений: 3
По умолчанию

Цитата:
Сообщение от ultimatet41 Посмотреть сообщение
Какого типа файл должен читаться бинарного или текстового? Вернее как он должен читаться, как бинарник или как текстовый?
как текстовый
dimongusev вне форума Ответить с цитированием
Старый 03.11.2014, 10:44   #6
ultimatet41
Форумчанин
 
Аватар для ultimatet41
 
Регистрация: 08.04.2012
Сообщений: 104
По умолчанию

Такое подойдёт?
Код:
import java.io.*;
import java.util.ArrayList;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("Введите путь к файлу:");
        String fstr = reader.readLine();
        File file = new File(fstr);
        reader.close();
        if (file.exists()) {
            changed(createArray(file));
        } else {
            System.out.println("File not found");
        }


    }

    public static void changed(int mas[]){
        for (int i = 0; i < mas.length; i++) {
            char[] chars = String.valueOf(mas[i]).toCharArray();
            for (int j = 1; j < chars.length; j++) {
                char a = chars[j];
                chars[j] = chars[j - 1];
                chars[j - 1] = a;
            }
            mas[i] = Integer.parseInt(String.valueOf(chars));
        }
        for (int i : mas) {
            System.out.println(i + " ");
        }
    }

    public static int[] createArray(File file) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
        ArrayList<Integer> list = new ArrayList<Integer>();
        String s = null;
        while ((s = reader.readLine()) != null) {
            list.add(Integer.parseInt(s));
        }
        int[] mas = new int[list.size()];
        for (int i = 0; i < list.size(); i++) {
            mas[i] = list.get(i);
        }
        reader.close();
        return mas;
    }
}
ultimatet41 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять местами наибольший и наименьший элементы файла. dimanoxxy Паскаль, Turbo Pascal, PascalABC.NET 5 08.06.2012 21:16
Ввести массив а[1], а [2], .... а[n] целых чисел. Поменять в нем местами соседние элементы, стоящие на четных местах, с элементами monokol Помощь студентам 5 28.01.2012 15:07
поменять соседние слова местами alex(21) Общие вопросы C/C++ 3 20.02.2011 16:28
Поменять местами элементы в TreeView RIO Общие вопросы Delphi 2 16.05.2010 02:30
Поменять местами элементы в массиве! Angel-dm Паскаль, Turbo Pascal, PascalABC.NET 5 14.04.2010 14:59