Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.Scanner;
- public class lab4_2 {
- static Scanner scConsole = new Scanner(System.in);
- public static int sum;
- static int matrixSizeInput() {
- final int MIN_VALUE = 1;
- final int MAX_VALUE = 8;
- boolean isIncorrect;
- int size = 0;
- System.out.println("Введите разрядность числа");
- do {
- isIncorrect = false;
- try {
- size = Integer.parseInt(scConsole.nextLine());
- } catch (Exception e) {
- System.out.println("Введите натуральное число");
- isIncorrect = true;
- }
- if ((!isIncorrect) && ((size < MIN_VALUE) || (size > MAX_VALUE))) {
- System.out.println("\"Пожалуйста, введите натуральное число меньшее 9!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return size;
- }
- static int chooseOutputSource() {
- Scanner in = new Scanner(System.in);
- boolean isIncorrect;
- int choice = 0;
- do {
- System.out.println("Выберите, куда будет производится вывод: 1 - файл, 2 - консоль.");
- isIncorrect = false;
- try {
- choice = Integer.parseInt(in.nextLine());
- } catch (Exception e) {
- System.out.println("Введите корректное значение");
- isIncorrect = true;
- }
- if (!isIncorrect && choice != 1 && choice != 2) {
- System.out.println("Введите 1 или 2");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return choice;
- }
- static void reverseArr(int[] numArr) {
- for (int i = 0; i < numArr.length / 2; i++) {
- int temp = numArr[i];
- numArr[i] = numArr[numArr.length - 1 - i];
- numArr[numArr.length - 1 - i] = temp;
- }
- }
- static int[] fillNumFromConsole(int size) {
- final int MIN_NUM_VALUE = 1;
- final int MAX_NUM_VALUE = 9;
- boolean isIncorrect;
- int[] numArr = new int[size];
- for (int i = 0; i < size; i++) {
- do {
- isIncorrect = false;
- numArr[i] = inputDigitFromConsole(i);
- if ((!isIncorrect) && ((numArr[i] < MIN_NUM_VALUE) || (numArr[i] > MAX_NUM_VALUE))) {
- System.out.println("Пожалуйста, введите натуральное число меньшее 9!");
- isIncorrect = true;
- }
- } while (isIncorrect);
- }
- reverseArr(numArr);
- return numArr;
- }
- private static int inputDigitFromConsole(int digit) {
- Scanner scConsole = new Scanner(System.in);
- boolean isIncorrect;
- int num = 0;
- do {
- System.out.print("Введите разряд номер: ");
- System.out.println(digit + 1);
- isIncorrect = false;
- try {
- num = Integer.parseInt(scConsole.nextLine());
- } catch (Exception e) {
- System.out.println("Введите число");
- isIncorrect = true;
- }
- } while (isIncorrect);
- return num;
- }
- static String getInputFileLocation() {
- boolean isIncorrect;
- String location;
- Scanner file = null;
- do {
- isIncorrect = false;
- System.out.println("Введите путь к файлу");
- location = scConsole.nextLine();
- File inputFile = new File(location);
- if (!inputFile.exists()) {
- System.out.println("Файл не существует, введите снова");
- isIncorrect = true;
- }
- } while (isIncorrect);
- if (file != null)
- System.out.println("Файл успешно открыт");
- return location;
- }
- static int getSizeFromfile(String location) throws FileNotFoundException {
- int size;
- File inputFile = new File(location);
- boolean isInCorrect = false;
- Scanner fileIn = new Scanner(inputFile);
- if (inputFile.length() == 0) {
- System.out.println("Файл пуст, введите данные с консоли");
- size = matrixSizeInput();
- } else {
- try {
- size = fileIn.nextInt();
- } catch (Exception I0Exception) {
- System.out.println("Разрядность числа указана не верно");
- System.out.println("Введите разряд числа с консоли");
- size = matrixSizeInput();
- fileIn.next();
- isInCorrect = true;
- }
- if (isInCorrect && ((size < 1) || (size > 8))) {
- System.out.println("Размер числа не может быть меньше 1 или больше 8");
- System.out.println("Введите размер числа с консоли");
- size = matrixSizeInput();
- fileIn.next();
- }
- }
- return size;
- }
- static int[] inputNumFromFile(int size, int pos, String location) throws FileNotFoundException {
- int[] numArr;
- boolean isInCorrect = false;
- File inputFile = new File(location);
- Scanner fileIn = new Scanner(inputFile);
- if (inputFile.length() == 0) {
- System.out.println("Файл пуст, введите данные с консоли");
- numArr = fillNumFromConsole(size);
- } else {
- for (int j = 0;j < pos; j++){
- fileIn.nextLine();
- }
- numArr = new int[size];
- for (int i = 0; i < size; i++) {
- try {
- numArr[i] = fileIn.nextInt();
- } catch (Exception I0Exception) {
- System.out.println("Разряд номер: " + (i + 1) + " указан не верно.");
- System.out.println("Введите элемент с консоли");
- numArr[i] = inputDigitFromConsole(i);
- }
- if ((numArr[i] < 1) | (numArr[i] > 9)) {
- System.out.println("Разряд числа не может быть меньше 1 или больше 8");
- System.out.println("Введите цифру с консоли");
- numArr[i] = inputDigitFromConsole(i);
- }
- }
- reverseArr(numArr);
- }
- return numArr;
- }
- static int chooseInput() {
- boolean isIncorrect;
- String line;
- do {
- isIncorrect = false;
- System.out.println("Хотите ли вы извлечь массив из файла? (y/n)");
- line = scConsole.nextLine().toLowerCase();
- if (!line.equals("y") && !line.equals("n") && !line.equals("")) {
- isIncorrect = true;
- System.out.println("Введите корректное значение");
- }
- } while (isIncorrect);
- if (line.equals("y") || line.equals("")) {
- return 0;
- } else {
- return 1;
- }
- }
- static void print(int[] arrays) {
- for (int i = arrays.length - 1; i >= 0; i--) {
- System.out.print(arrays[i] + " ");
- }
- System.out.println();
- }
- static void findSum(int[] firstNum, int[] secondNum, int digit) {
- int order = 1;
- for (int i = 0; i < digit; i++) {
- order = order * 10;
- }
- if (digit < firstNum.length) {
- int prevDig = ((firstNum[digit] + secondNum[digit]) % 10) * order;
- int nextDig = ((firstNum[digit] + secondNum[digit]) / 10) * order * 10;
- sum = sum + nextDig + prevDig;
- findSum(firstNum, secondNum, digit + 1);
- }
- }
- private static PrintWriter getOutputFileLocation() {
- boolean isIncorrect;
- String location;
- PrintWriter file = null;
- do {
- isIncorrect = false;
- System.out.println("Введите путь к файлу:");
- location = scConsole.nextLine();
- try {
- file = new PrintWriter(location);
- } catch (FileNotFoundException e) {
- isIncorrect = true;
- System.out.println("Файл по этому пути не найден");
- }
- } while (isIncorrect);
- if (file != null)
- System.out.println("Файл успешно открыт");
- return file;
- }
- private static void outputResultToFile(int size, int[] firstNum, int[] secondNum) throws IOException {
- PrintWriter out = getOutputFileLocation();
- out.println("Массив А:");
- for (int i = size - 1; i >= 0; i--){
- out.print(firstNum[i] + " ");
- }
- out.println();
- out.println("Массив В:");
- for (int i = size - 1; i >= 0; i--){
- out.print(secondNum[i] + " ");
- }
- out.println();
- out.print("Сумма чисел: ");
- out.print(sum);
- out.close();
- System.out.println("Успешно сохранено");
- }
- static void outputResult(int source, int size, int [] firstNum, int[] secondNum) throws IOException {
- switch (source) {
- case 1:
- outputResultToFile(size, firstNum, secondNum);
- break;
- case 2:
- System.out.println("Число А");
- print(firstNum);
- System.out.println("Число В");
- print(secondNum);
- System.out.print("Сумма чисел: ");
- System.out.println(sum);
- break;
- }
- }
- public static void main(String[] args) throws IOException {
- System.out.println("Данная программа находит сумму двух чисел");
- int chosenInput = chooseInput();
- int[] firstNum;
- int[] secondNum;
- int size;
- if (chosenInput == 0) {
- String location = getInputFileLocation(); // D:\Delphi\fileinput.txt
- size = getSizeFromfile(location);
- firstNum = inputNumFromFile(size,1, location);
- secondNum = inputNumFromFile(size,2, location);
- } else {
- size = matrixSizeInput();
- System.out.println("Введите число А");
- firstNum = fillNumFromConsole(size);
- System.out.println("Введите число В");
- secondNum = fillNumFromConsole(size);
- }
- int digit = 0;
- findSum(firstNum, secondNum, digit);
- int choiсe = chooseOutputSource();
- outputResult(choiсe, size, firstNum, secondNum);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement