Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.company;
- import java.io.File;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.InputMismatchException;
- import java.util.NoSuchElementException;
- import java.util.Scanner;
- public class Main {
- static int maxNum = 32767;
- static int minNum = 1;
- static byte chooseConsole = 1;
- static byte chooseFile = 2;
- static Scanner scan = new Scanner(System.in);
- static int[] makeStrIntoNumber(String numberStr){
- int[] number = new int[numberStr.length()];
- for(int i = 0;i<numberStr.length();i++){
- number[i] = Integer.parseInt(""+numberStr.charAt(i));
- }
- return number;
- }
- static int[] takeNumber(String numberStr){
- int[] number = new int[0];
- int numVal = 0;
- boolean isCorrect;
- do{
- isCorrect = true;
- try{
- numVal = Integer.parseInt(numberStr);
- }
- catch (Exception e){
- System.out.print("Произошла ошибка! Введите число ещё раз: ");
- numberStr = scan.nextLine();
- isCorrect = false;
- }
- if(isCorrect && ((numVal > maxNum)||(numVal < minNum))){
- System.out.print("Число выходит за пределы! Введите число ещё раз: ");
- numberStr = scan.nextLine();
- isCorrect = false;
- }
- if(isCorrect){
- number = makeStrIntoNumber(numberStr);
- }
- }while(!isCorrect);
- return number;
- }
- static int[] countAnswer(int[] answer, int[] firstNumber, int[] secondNumber, int i){//999 + 1=
- if(i <= firstNumber.length){
- if(secondNumber.length - i >= 0){
- answer[firstNumber.length - i] = firstNumber[firstNumber.length - i] + secondNumber[secondNumber.length - i];
- }
- else{
- answer[firstNumber.length - i] = firstNumber[firstNumber.length - i];
- }
- if(firstNumber.length - i < firstNumber.length - 1){
- if(answer[firstNumber.length - i + 1] > 9)
- answer[firstNumber.length - i]++;
- if(answer[firstNumber.length - i + 1] > 9)
- answer[firstNumber.length - i + 1] -= 10;
- }
- i++;
- answer = countAnswer(answer, firstNumber, secondNumber, i);
- }
- return answer;
- }
- static void showNumber(int[] answer){
- for(int i = 0;i < answer.length;i++){
- System.out.print(answer[i]);
- }
- }
- static byte takeChoice(){
- byte choice = 0;
- boolean isCorrect;
- do{
- isCorrect = true;
- try{
- choice = Byte.parseByte(scan.nextLine());
- }
- catch(Exception e){
- System.out.println("Произошла ошибка! Введите число:");
- isCorrect = false;
- }
- if (isCorrect && ((choice != chooseConsole) && (choice != chooseFile))){
- System.out.println("Число выходит за пределы! Введите число (1 или 2):");
- isCorrect = false;
- }
- }while(!isCorrect);
- return choice;
- }
- static boolean checkWriting(String path){
- boolean isCorrect = true;
- try{
- FileWriter writer = new FileWriter(path, true);
- writer.append(" ");
- writer.close();
- }
- catch(IOException e){
- isCorrect = false;
- }
- return isCorrect;
- }
- static String takeFilePath(){
- String path;
- boolean isCorrect;
- do{
- isCorrect = true;
- path = scan.nextLine();
- File file = new File(path);
- if(!file.exists() || !checkWriting(path)){
- System.out.print("Произошла ошибка! Выберите другой файл или измените настройки данного: ");
- isCorrect = false;
- }
- }while(!isCorrect);
- return path;
- }
- static String takeInputFile(){
- String path;
- int temp1 = 0;
- int temp2 = 0;
- boolean isCorrect;
- do{
- isCorrect = true;
- path = takeFilePath();
- try{
- Scanner scanFile = new Scanner(new File(path));
- temp1 = scanFile.nextInt();
- temp2 = scanFile.nextInt();
- scanFile.close();
- }
- catch(IOException e){
- isCorrect = false;
- }
- catch (InputMismatchException e){
- isCorrect = false;
- }
- catch (NoSuchElementException e){
- isCorrect = false;
- }
- if(isCorrect && (temp1 > maxNum || temp1 < minNum))
- isCorrect = false;
- else if(isCorrect && (temp2 > maxNum || temp2 < minNum))
- isCorrect = false;
- if(!isCorrect)
- System.out.print("Произошла ошибка! Выберите другой файл или измените настройки данного: ");
- }while(!isCorrect);
- return path;
- }
- static String[] takeNumbersFromFile(String path) throws IOException{
- String[] numbers = new String[2];
- Scanner scanFile = new Scanner(new File(path));
- numbers[0] = Integer.toString(scanFile.nextInt());
- numbers[1] = Integer.toString(scanFile.nextInt());
- return numbers;
- }
- static void showAnswerInFile(String path, int[] answer, int[] firstNumber, int[] secondNumber) throws IOException{
- FileWriter writer = new FileWriter(path);
- for(int i=0;i < firstNumber.length;i++)
- writer.write(Integer.toString(firstNumber[i]));
- writer.write(" + ");
- for(int i=0;i < secondNumber.length;i++)
- writer.write(Integer.toString(secondNumber[i]));
- writer.write(" = ");
- for(int i=0;i < answer.length;i++)
- writer.write(Integer.toString(answer[i]));
- writer.close();
- }
- public static void main(String[] args) throws IOException{
- System.out.println("Данная программа считает сумму двух натуральных чисел.\n1.Ввести числа в консоли\n2.Взять числа из файла");
- int choice = takeChoice();
- int[] firstNumber, secondNumber, answer;
- int i = 1;
- if(choice == chooseConsole){
- System.out.print("Введите первое число:");
- firstNumber = takeNumber(scan.nextLine());
- System.out.print("Введите второе число:");
- secondNumber = takeNumber(scan.nextLine());
- }
- else{
- System.out.println("Введите путь к файлу:");
- String path = takeInputFile();
- String[] numbers = takeNumbersFromFile(path);
- firstNumber = makeStrIntoNumber(numbers[0]);
- secondNumber = makeStrIntoNumber(numbers[1]);
- }
- if (firstNumber.length > secondNumber.length){
- answer = new int[firstNumber.length];
- answer = countAnswer(answer, firstNumber, secondNumber, i);
- }
- else{
- answer = new int[secondNumber.length];
- answer = countAnswer(answer, secondNumber, firstNumber, i);
- }
- System.out.println("1.Вывести ответ на экран\n2.Вывести ответ в файл");
- choice = takeChoice();
- if(choice == chooseConsole){
- System.out.print("Сумма равна: ");
- showNumber(answer);
- }
- else{
- System.out.println("Введите путь к файлу:");
- String path = takeFilePath();
- showAnswerInFile(path, answer, firstNumber, secondNumber);
- System.out.println("Результаты успешно сохранены!");
- }
- scan.close();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement