diff options
| author | Syndamia <kami02882@gmail.com> | 2019-07-30 15:32:30 +0300 |
|---|---|---|
| committer | Syndamia <kami02882@gmail.com> | 2019-07-30 15:32:30 +0300 |
| commit | a48a6e1c302a5e90235a82e73517cd43f9c1432e (patch) | |
| tree | 33a0cce43035f6a0100b890199b486827679bd51 | |
| parent | fa8afba66b94af7609494fa83371954cea380c0d (diff) | |
| download | Self-learning-a48a6e1c302a5e90235a82e73517cd43f9c1432e.tar Self-learning-a48a6e1c302a5e90235a82e73517cd43f9c1432e.tar.gz Self-learning-a48a6e1c302a5e90235a82e73517cd43f9c1432e.zip | |
Made Number names a standalone project; Made number names code more efficient and enlarged maximum and minimum number value
| -rw-r--r-- | Java/Beginer training/out/production/Beginer training/NumberName.class | bin | 4015 -> 4947 bytes | |||
| -rw-r--r-- | Java/Beginer training/src/NumberName.java | 120 | ||||
| -rw-r--r-- | Java/Number_Names/.idea/.gitignore | 2 | ||||
| -rw-r--r-- | Java/Number_Names/.idea/.name | 1 | ||||
| -rw-r--r-- | Java/Number_Names/.idea/artifacts/Number_Names_jar.xml | 8 | ||||
| -rw-r--r-- | Java/Number_Names/.idea/misc.xml | 6 | ||||
| -rw-r--r-- | Java/Number_Names/.idea/modules.xml | 8 | ||||
| -rw-r--r-- | Java/Number_Names/.idea/vcs.xml | 6 | ||||
| -rw-r--r-- | Java/Number_Names/Number_Names.iml | 11 | ||||
| -rw-r--r-- | Java/Number_Names/out/artifacts/Number_Names_jar/Number_Names.jar | bin | 0 -> 3021 bytes | |||
| -rw-r--r-- | Java/Number_Names/out/production/Number_Names/META-INF/MANIFEST.MF | 3 | ||||
| -rw-r--r-- | Java/Number_Names/out/production/Number_Names/Program.class | bin | 0 -> 4939 bytes | |||
| -rw-r--r-- | Java/Number_Names/src/META-INF/MANIFEST.MF | 3 | ||||
| -rw-r--r-- | Java/Number_Names/src/Program.java | 124 |
14 files changed, 172 insertions, 120 deletions
diff --git a/Java/Beginer training/out/production/Beginer training/NumberName.class b/Java/Beginer training/out/production/Beginer training/NumberName.class Binary files differindex 0bf8239..39408a5 100644 --- a/Java/Beginer training/out/production/Beginer training/NumberName.class +++ b/Java/Beginer training/out/production/Beginer training/NumberName.class diff --git a/Java/Beginer training/src/NumberName.java b/Java/Beginer training/src/NumberName.java deleted file mode 100644 index 34f735c..0000000 --- a/Java/Beginer training/src/NumberName.java +++ /dev/null @@ -1,120 +0,0 @@ -import java.util.ArrayList; -import java.math.*; -import java.util.Scanner; - -public class NumberName { - public static void main(String args[]){ - //Used http://www.englishlessonsbrighton.co.uk/saying-large-numbers-english/ and https://www.grammarly.com/blog/hyphen-in-compound-numbers/ - Scanner scn = new Scanner(System.in); - - System.out.println("Number to British English text"); - System.out.println("How to use: type a whole number, press enter and the program will say it's full proper name. Close the program to stop it."); - System.out.println("NOTE: Your numbers must be between 2147483647 and -2147483648 (any characters that are not numbers and - will result in error)"); - - while (true) { - try { - int n = Integer.parseInt(scn.nextLine().trim()); - System.out.println(NameOfNumber(n)); - } catch (Exception ex) { - System.out.println("ERROR: Please type a whole number between 2147483647 and -2147483648 (NOTE: any characters that are not numbers and - will result in this error)"); - } - } - } - - public static String NameOfNumber(int num) { - StringBuilder name = new StringBuilder(num < 0 ? "negative " : ""); - var number_parts = new ArrayList<Integer>(); - - while (num != 0) { - number_parts.add(Math.abs(num % 1000)); - num /= 1000; - } - - for (int i = number_parts.size() - 1; i > -1; i--){ - int curr_num = number_parts.get(i); - - if ((curr_num + "").length() == 3) { - name.append(SmallNumName(curr_num / 100)).append(" hundred"); - - curr_num %= 100; - if (curr_num != 0) name.append(" and "); - } - name.append(SmallNumName(curr_num)); - - switch (i) { - case 1: if (number_parts.get(1) != 0) { - name.append(" thousand"); - - if (number_parts.get(0) != 0) { - if (number_parts.get(0) / 100 == 0) name.append(" and "); - else name.append(", "); - } - } break; - - case 2: if (number_parts.get(2) != 0) { - name.append(" million"); - - if (number_parts.get(0) != 0 || number_parts.get(1) != 0) { - if (number_parts.get(1) / 100 == 0) name.append(" and "); - else name.append(", "); - } - } break; - - case 3: if (number_parts.get(3) != 0) { - name.append(" milliard"); - - if (number_parts.get(0) != 0 || number_parts.get(1) != 0 || number_parts.get(2) != 0) { - if (number_parts.get(2) / 100 == 0) name.append(" and "); - else name.append(", "); - } - } break; - } - } - return name.toString(); - } - - private static String SmallNumName(int num) { - int part = 1; - switch (num) { - case 0: return ""; - case 1: return "one"; - case 2: return "two"; - case 3: return "three"; - case 4: return "four"; - case 5: return "five"; - case 6: return "six"; - case 7: return "seven"; - case 8: return "eight"; - case 9: return "nine"; - - case 10: return "ten"; - case 11: return "eleven"; - case 12: return "twelve"; - case 13: return "thirteen"; - case 15: return "fifteen"; - case 18: return "eighteen"; - case 14: part = 4; - case 16: if (part == 1) part = 6; - case 17: if (part == 1) part = 7; - case 19: if (part == 1) part = 9; - return SmallNumName(part) + "teen"; - } - - if (num > 19 && num < 100) { - int f_digit = num / 10; - StringBuilder name = new StringBuilder(); - - switch (f_digit) { - case 2: name.append("twenty"); break; - case 3: name.append("thirty"); break; - case 4: name.append("forty"); break; - case 5: name.append("fifty"); break; - case 8: name.append("eighty"); break; - - default: name.append(SmallNumName(f_digit)).append("ty"); break; - } - return num % 10 != 0 ? name + "-" + SmallNumName(num % 10) : name.toString(); - } - return "ERR"; - } -} diff --git a/Java/Number_Names/.idea/.gitignore b/Java/Number_Names/.idea/.gitignore new file mode 100644 index 0000000..5c98b42 --- /dev/null +++ b/Java/Number_Names/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml
\ No newline at end of file diff --git a/Java/Number_Names/.idea/.name b/Java/Number_Names/.idea/.name new file mode 100644 index 0000000..074fff2 --- /dev/null +++ b/Java/Number_Names/.idea/.name @@ -0,0 +1 @@ +Number Names
\ No newline at end of file diff --git a/Java/Number_Names/.idea/artifacts/Number_Names_jar.xml b/Java/Number_Names/.idea/artifacts/Number_Names_jar.xml new file mode 100644 index 0000000..1c7c60a --- /dev/null +++ b/Java/Number_Names/.idea/artifacts/Number_Names_jar.xml @@ -0,0 +1,8 @@ +<component name="ArtifactManager"> + <artifact type="jar" name="Number_Names:jar"> + <output-path>$PROJECT_DIR$/out/artifacts/Number_Names_jar</output-path> + <root id="archive" name="Number_Names.jar"> + <element id="module-output" name="Number_Names" /> + </root> + </artifact> +</component>
\ No newline at end of file diff --git a/Java/Number_Names/.idea/misc.xml b/Java/Number_Names/.idea/misc.xml new file mode 100644 index 0000000..e0844bc --- /dev/null +++ b/Java/Number_Names/.idea/misc.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK"> + <output url="file://$PROJECT_DIR$/out" /> + </component> +</project>
\ No newline at end of file diff --git a/Java/Number_Names/.idea/modules.xml b/Java/Number_Names/.idea/modules.xml new file mode 100644 index 0000000..9143bdd --- /dev/null +++ b/Java/Number_Names/.idea/modules.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="ProjectModuleManager"> + <modules> + <module fileurl="file://$PROJECT_DIR$/Number_Names.iml" filepath="$PROJECT_DIR$/Number_Names.iml" /> + </modules> + </component> +</project>
\ No newline at end of file diff --git a/Java/Number_Names/.idea/vcs.xml b/Java/Number_Names/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/Java/Number_Names/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$/../.." vcs="Git" /> + </component> +</project>
\ No newline at end of file diff --git a/Java/Number_Names/Number_Names.iml b/Java/Number_Names/Number_Names.iml new file mode 100644 index 0000000..c90834f --- /dev/null +++ b/Java/Number_Names/Number_Names.iml @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<module type="JAVA_MODULE" version="4"> + <component name="NewModuleRootManager" inherit-compiler-output="true"> + <exclude-output /> + <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> + </content> + <orderEntry type="inheritedJdk" /> + <orderEntry type="sourceFolder" forTests="false" /> + </component> +</module>
\ No newline at end of file diff --git a/Java/Number_Names/out/artifacts/Number_Names_jar/Number_Names.jar b/Java/Number_Names/out/artifacts/Number_Names_jar/Number_Names.jar Binary files differnew file mode 100644 index 0000000..84de4ca --- /dev/null +++ b/Java/Number_Names/out/artifacts/Number_Names_jar/Number_Names.jar diff --git a/Java/Number_Names/out/production/Number_Names/META-INF/MANIFEST.MF b/Java/Number_Names/out/production/Number_Names/META-INF/MANIFEST.MF new file mode 100644 index 0000000..8008376 --- /dev/null +++ b/Java/Number_Names/out/production/Number_Names/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: Program + diff --git a/Java/Number_Names/out/production/Number_Names/Program.class b/Java/Number_Names/out/production/Number_Names/Program.class Binary files differnew file mode 100644 index 0000000..20d05f5 --- /dev/null +++ b/Java/Number_Names/out/production/Number_Names/Program.class diff --git a/Java/Number_Names/src/META-INF/MANIFEST.MF b/Java/Number_Names/src/META-INF/MANIFEST.MF new file mode 100644 index 0000000..8008376 --- /dev/null +++ b/Java/Number_Names/src/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: Program + diff --git a/Java/Number_Names/src/Program.java b/Java/Number_Names/src/Program.java new file mode 100644 index 0000000..ed9ef79 --- /dev/null +++ b/Java/Number_Names/src/Program.java @@ -0,0 +1,124 @@ +import java.util.ArrayList; +import java.util.Scanner; + +public class Program { + + public static String[] digits = {"", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; + public static String[] teens = {"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; + public static String[] tens = {"ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"}; + + public static void main(String args[]){ + //Used http://www.englishlessonsbrighton.co.uk/saying-large-numbers-english/ and https://www.grammarly.com/blog/hyphen-in-compound-numbers/ + Scanner scn = new Scanner(System.in); + + System.out.println("Number to British English text"); + System.out.println("How to use: type a whole number, press enter and the program will say it's full proper name. Close the program to stop it."); + System.out.println("NOTE: Your numbers must be between 9223372036854775807 and –9223372036854775808 (any characters that are not numbers and - will result in error)"); + + while (true) { + try { + long n = Long.parseLong(scn.nextLine().trim()); + System.out.println(NumberName(n)); + } catch (Exception ex) { + System.out.println("ERROR: Please type a whole number between 2147483647 and -2147483648 (NOTE: any characters that are not numbers and - will result in this error)"); + } + } + } + + public static String NumberName(long num) { + StringBuilder name = new StringBuilder(num < 0 ? "negative " : ""); + var number_parts = new ArrayList<Long>(); + + if (num == 0) return "zero"; + + while (num != 0) { + number_parts.add(Math.abs(num % 1000)); + num /= 1000; + } + + for (int i = number_parts.size() - 1; i > -1; i--){ + long curr_num = number_parts.get(i); + + if ((curr_num + "").length() == 3) { + name.append(SmallNumberName((int)curr_num / 100)).append(" hundred"); + + curr_num %= 100; + if (curr_num != 0) name.append(" and "); + } + name.append(SmallNumberName((int)curr_num)); + + switch (i) { + case 1: + if (number_parts.get(1) != 0) { + name.append(" thousand"); + + if (number_parts.get(0) != 0) { + if (number_parts.get(0) / 100 == 0) name.append(" and "); + else name.append(", "); + } + } break; + + case 2: + if (number_parts.get(2) != 0) { + name.append(" million"); + + if (number_parts.get(0) != 0 || number_parts.get(1) != 0) { + if (number_parts.get(0) / 100 == 0) name.append(" and "); + else name.append(", "); + } + } break; + + case 3: + if (number_parts.get(3) != 0) { + name.append(" milliard"); + + if (number_parts.get(0) != 0 || number_parts.get(1) != 0 || number_parts.get(2) != 0) { + if (number_parts.get(0) / 100 == 0) name.append(" and "); + else name.append(", "); + } + } break; + case 4: + if (number_parts.get(4) != 0) { + name.append(" billion"); + + if (number_parts.get(0) != 0 || number_parts.get(1) != 0 || number_parts.get(2) != 0 || number_parts.get(3) != 0) { + if (number_parts.get(0) / 100 == 0) name.append(" and "); + else name.append(", "); + } + } break; + case 5: + if (number_parts.get(5) != 0) { + name.append(" billiard"); + + if (number_parts.get(0) != 0 || number_parts.get(1) != 0 || number_parts.get(2) != 0 || number_parts.get(3) != 0 || number_parts.get(4) != 0) { + if (number_parts.get(0) / 100 == 0) name.append(" and "); + else name.append(", "); + } + } break; + case 6: + if (number_parts.get(6) != 0) { + name.append(" trillion"); + + if (number_parts.get(0) != 0 || number_parts.get(1) != 0 || number_parts.get(2) != 0 || number_parts.get(3) != 0 || number_parts.get(4) != 0 || number_parts.get(5) != 0) { + if (number_parts.get(0) / 100 == 0) name.append(" and "); + else name.append(", "); + } + } break; + } + } + return name.toString(); + } + + private static String SmallNumberName(int num) { + if (num < 20) { + try { + return digits[num]; + } catch (Exception e) { + return teens[num % 10]; + } + } else if (num < 100) { + return num % 10 == 0 ? tens[(num / 10) - 1] : tens[(num / 10) - 1] + "-" + SmallNumberName(num % 10); + } + return "ERR"; + } +}
\ No newline at end of file |
