Advertisement
Cinder1986

42

Mar 13th, 2022
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.20 KB | None | 0 0
  1. package com.company;
  2. import java.io.File;
  3. import java.io.FileWriter;
  4. import java.io.IOException;
  5. import java.util.InputMismatchException;
  6. import java.util.NoSuchElementException;
  7. import java.util.Scanner;
  8. public class Main {
  9.  
  10. static int maxNum = 32767;
  11. static int minNum = 1;
  12. static byte chooseConsole = 1;
  13. static byte chooseFile = 2;
  14.  
  15. static Scanner scan = new Scanner(System.in);
  16.  
  17. static int[] makeStrIntoNumber(String numberStr){
  18. int[] number = new int[numberStr.length()];
  19. for(int i = 0;i<numberStr.length();i++){
  20. number[i] = Integer.parseInt(""+numberStr.charAt(i));
  21. }
  22. return number;
  23. }
  24. static int[] takeNumber(String numberStr){
  25. int[] number = new int[0];
  26. int numVal = 0;
  27. boolean isCorrect;
  28. do{
  29. isCorrect = true;
  30. try{
  31. numVal = Integer.parseInt(numberStr);
  32. }
  33. catch (Exception e){
  34. System.out.print("Произошла ошибка! Введите число ещё раз: ");
  35. numberStr = scan.nextLine();
  36. isCorrect = false;
  37. }
  38. if(isCorrect && ((numVal > maxNum)||(numVal < minNum))){
  39. System.out.print("Число выходит за пределы! Введите число ещё раз: ");
  40. numberStr = scan.nextLine();
  41. isCorrect = false;
  42. }
  43. if(isCorrect){
  44. number = makeStrIntoNumber(numberStr);
  45. }
  46. }while(!isCorrect);
  47. return number;
  48. }
  49. static int[] countAnswer(int[] answer, int[] firstNumber, int[] secondNumber, int i){//999 + 1=
  50. if(i <= firstNumber.length){
  51. if(secondNumber.length - i >= 0){
  52. answer[firstNumber.length - i] = firstNumber[firstNumber.length - i] + secondNumber[secondNumber.length - i];
  53. }
  54. else{
  55. answer[firstNumber.length - i] = firstNumber[firstNumber.length - i];
  56. }
  57. if(firstNumber.length - i < firstNumber.length - 1){
  58. if(answer[firstNumber.length - i + 1] > 9)
  59. answer[firstNumber.length - i]++;
  60. if(answer[firstNumber.length - i + 1] > 9)
  61. answer[firstNumber.length - i + 1] -= 10;
  62. }
  63. i++;
  64. answer = countAnswer(answer, firstNumber, secondNumber, i);
  65. }
  66. return answer;
  67. }
  68. static void showNumber(int[] answer){
  69. for(int i = 0;i < answer.length;i++){
  70. System.out.print(answer[i]);
  71. }
  72. }
  73. static byte takeChoice(){
  74. byte choice = 0;
  75. boolean isCorrect;
  76. do{
  77. isCorrect = true;
  78. try{
  79. choice = Byte.parseByte(scan.nextLine());
  80. }
  81. catch(Exception e){
  82. System.out.println("Произошла ошибка! Введите число:");
  83. isCorrect = false;
  84. }
  85. if (isCorrect && ((choice != chooseConsole) && (choice != chooseFile))){
  86. System.out.println("Число выходит за пределы! Введите число (1 или 2):");
  87. isCorrect = false;
  88. }
  89. }while(!isCorrect);
  90. return choice;
  91. }
  92. static boolean checkWriting(String path){
  93. boolean isCorrect = true;
  94. try{
  95. FileWriter writer = new FileWriter(path, true);
  96. writer.append(" ");
  97. writer.close();
  98. }
  99. catch(IOException e){
  100. isCorrect = false;
  101. }
  102. return isCorrect;
  103. }
  104. static String takeFilePath(){
  105. String path;
  106. boolean isCorrect;
  107. do{
  108. isCorrect = true;
  109. path = scan.nextLine();
  110. File file = new File(path);
  111. if(!file.exists() || !checkWriting(path)){
  112. System.out.print("Произошла ошибка! Выберите другой файл или измените настройки данного: ");
  113. isCorrect = false;
  114. }
  115. }while(!isCorrect);
  116. return path;
  117. }
  118. static String takeInputFile(){
  119. String path;
  120. int temp1 = 0;
  121. int temp2 = 0;
  122. boolean isCorrect;
  123. do{
  124. isCorrect = true;
  125. path = takeFilePath();
  126. try{
  127. Scanner scanFile = new Scanner(new File(path));
  128. temp1 = scanFile.nextInt();
  129. temp2 = scanFile.nextInt();
  130. scanFile.close();
  131. }
  132. catch(IOException e){
  133. isCorrect = false;
  134. }
  135. catch (InputMismatchException e){
  136. isCorrect = false;
  137. }
  138. catch (NoSuchElementException e){
  139. isCorrect = false;
  140. }
  141. if(isCorrect && (temp1 > maxNum || temp1 < minNum))
  142. isCorrect = false;
  143. else if(isCorrect && (temp2 > maxNum || temp2 < minNum))
  144. isCorrect = false;
  145. if(!isCorrect)
  146. System.out.print("Произошла ошибка! Выберите другой файл или измените настройки данного: ");
  147. }while(!isCorrect);
  148. return path;
  149. }
  150. static String[] takeNumbersFromFile(String path) throws IOException{
  151. String[] numbers = new String[2];
  152. Scanner scanFile = new Scanner(new File(path));
  153. numbers[0] = Integer.toString(scanFile.nextInt());
  154. numbers[1] = Integer.toString(scanFile.nextInt());
  155. return numbers;
  156. }
  157. static void showAnswerInFile(String path, int[] answer, int[] firstNumber, int[] secondNumber) throws IOException{
  158. FileWriter writer = new FileWriter(path);
  159. for(int i=0;i < firstNumber.length;i++)
  160. writer.write(Integer.toString(firstNumber[i]));
  161. writer.write(" + ");
  162. for(int i=0;i < secondNumber.length;i++)
  163. writer.write(Integer.toString(secondNumber[i]));
  164. writer.write(" = ");
  165. for(int i=0;i < answer.length;i++)
  166. writer.write(Integer.toString(answer[i]));
  167. writer.close();
  168. }
  169. public static void main(String[] args) throws IOException{
  170. System.out.println("Данная программа считает сумму двух натуральных чисел.\n1.Ввести числа в консоли\n2.Взять числа из файла");
  171. int choice = takeChoice();
  172. int[] firstNumber, secondNumber, answer;
  173. int i = 1;
  174. if(choice == chooseConsole){
  175. System.out.print("Введите первое число:");
  176. firstNumber = takeNumber(scan.nextLine());
  177. System.out.print("Введите второе число:");
  178. secondNumber = takeNumber(scan.nextLine());
  179. }
  180. else{
  181. System.out.println("Введите путь к файлу:");
  182. String path = takeInputFile();
  183. String[] numbers = takeNumbersFromFile(path);
  184. firstNumber = makeStrIntoNumber(numbers[0]);
  185. secondNumber = makeStrIntoNumber(numbers[1]);
  186. }
  187. if (firstNumber.length > secondNumber.length){
  188. answer = new int[firstNumber.length];
  189. answer = countAnswer(answer, firstNumber, secondNumber, i);
  190. }
  191. else{
  192. answer = new int[secondNumber.length];
  193. answer = countAnswer(answer, secondNumber, firstNumber, i);
  194. }
  195. System.out.println("1.Вывести ответ на экран\n2.Вывести ответ в файл");
  196. choice = takeChoice();
  197. if(choice == chooseConsole){
  198. System.out.print("Сумма равна: ");
  199. showNumber(answer);
  200. }
  201. else{
  202. System.out.println("Введите путь к файлу:");
  203. String path = takeFilePath();
  204. showAnswerInFile(path, answer, firstNumber, secondNumber);
  205. System.out.println("Результаты успешно сохранены!");
  206. }
  207. scan.close();
  208. }
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement