Решение на Домашно 01 от Основи на програмирането с Java - декември 2016
Това са моите решения на домашното от 10.12 + защо съм избрал да реша задачите по този начин. Темата е отрорена за дискусии, алтернативни решения и въпроси.
Задача 01-01:
Напишете конзолна Java програма, която отпечатва текста “Hello Java”.
public class Uprajnenie01_01 {
public static void main(String[] args) {
//Print "Hello Java"
System.out.println("Hello Java");
}
Тук няма нужда от обяснения. Вички сме направили задачата по този начин.
Задача 01-02:
Напишете конзолна Java програма, която пресмята и отпечатва стойността на следния числен израз:
(3522 + 52353) * 23 - (2336 * 501 + 23432 - 6743) * 3
public class Uprjnenie01_02 {
public static void main(String[] args) {
System.out.println((3522 + 52353) * 23 - (2336 * 501 + 23432 - 6743) * 3);
}
}
Тук просто записваме целият математически израз в System.out.println();.
Задача 01-03:
Напишете Java конзолна програма, която отпечатва числата от 1 до 20 на отделни редове на конзолата.
1. Създайте нов Java клас със име “Nums1To20“
2. Направете си main метод.
3. Напишете 20 команди System.out.println(); една след друга, за да отпечатате числата от 1 до 20.
public class Nums1To20 {
public static void main(String[] args) {
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
System.out.println(6);
System.out.println(7);
System.out.println(8);
System.out.println(9);
System.out.println(10);
System.out.println(11);
System.out.println(12);
System.out.println(13);
System.out.println(14);
System.out.println(15);
System.out.println(16);
System.out.println(17);
System.out.println(18);
System.out.println(19);
System.out.println(20);
}
}
алтернативно решение с цикъл for от Ivan Andreev (от фейсбук)
public static void main(String[] args) {
for (int i = 1; i <= 20; i++) {
System.out.println(i);
}
}
Важно при това решение е да започнем цикълът от i = 1 и да го извъртим до 20 включително (i <= 20)
Задача 01-04:
Напишете Java конзолна програма, която отпечатва триъгълник от 55 звездички, разположени на 10 реда
public class TriangleOf55Stars {
public static void main(String[] args) {
String star = "*";
for (int i = 0; i < 10; i++) {
System.out.println(star);
star+="*";
}
}
}
Декларираме стринг star и му задаваме начална стойност "*". използваме цикъл който се завърта 10 пъти за да отпрчатаме стойността на стринга, като след всяко отпечтване добаваме по една зездва към стринга преди завършването на текущотъо завъртане на цикъла. star+="*"; е еквивалент на star = star + "*";
Задача 01-05:
Напишете Java програма, която прочита от конзолата две числа a и b, пресмята и отпечатва лицето на правоъгълник със страни a и b.
import java.util.Scanner;
public class Uprajnenie01_05 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//Enter rectangle size
int a = scan.nextInt();
int b = scan.nextInt();
//Print rectangle area
System.out.println(a*b);
}
}
Създаваме скенер за въвеждане в конзолата и при декларирането на променливите въвеждаме стойностите им в конзолата чрез скенера. Не е нужно да създаваме трета променлива за лице на правоъгълник, а директно записваме математическият израз a*b в System.out.println(); за да изведем резултата.
Задача 01-06:
Напишете Java конзолна програма, която прочита от конзолата цяло положително число N и отпечатва на конзолата квадрат от N звездички.
1. Направете конзолна Java програма. За да прочетете числото N (2 ≤ N ≤100)
static void main(String[] args) {
Scanner console = new Scanner(System.in);
int n = Integer.parseInt(console.nextLine());
// TODO: print the rectangle
}
2. Допишете програмата по-горе, за да отпечатва квадрат, съставен от звездички. Може да се наложи да използвате for-цикли.(това условие очевидно не съм го изпълнил дословно)
import java.util.Scanner;
public class Uprajnenie01_06 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//Enter Square size
int n = scan.nextInt();
while (!(2 <= n && n <= 100)) {
n = scan.nextInt();
}
//Square top/bottom and sides
String star = new String(new char[n]).replace("\0", "*");
String space = new String(new char[n - 2]).replace("\0", " ");
//Draw square
for (int i = 1; i <= n; i++) {
if (!(i == 1 || i == n)) {
System.out.println("*" + space + "*");
} else {
System.out.println(star);
}
}
}
}
По мое мнение това е най-интересната задача. Правим си скенер за четене от конзолата и при декларирането на n (размерът на квадрата) въвеждаме стойност чре скенера. Правим цикъл While с проверка за n да е 2 ≤ N ≤100 и ако n не отговаря на условието се изисква ново въвеждане на променливата. Цикълът While се върти докато не въведем n в определената граница. Обърнете внимание, че проверкава в While е обратното на "n в границата ли е" (!(2 <= n && n <= 100)), което означава че n трябва да е извън границата за да се изпълни повторното въвеждане на стойност (n = scan.nextInt();). В следващите два реда декларираме два стринга, един който ще използваме за "капак" и "дъно" на квадрата(star) и един стринг за празните места в квадрата (space). Стринговете star и star са декларирани съответно с дължина n и n-2, като при декларирането ги запълваме съответно със звездички и празни места. За принтирането на квадрата използваме цикъл for, който ще отпечатва по един ред от квадрата при всяко завъртане. Вътре в цикъла имаме проверка кой от двата стринга да отпечатаме. В if правим проверка дали отпечатваме не-"капак" или не-"дъно", като отново особеното е че обръщаме резултата от проверката с !. Поверката я обръщаме за да можем "капак" и "дъно" да ги отпечатваме в else само ако не се отпечатва средата. По този начин даваме предимсто на вътрешността на квадрата, която може да бъде отпечатана многоркатно, за разлика от от "капак" и "дъно" които се опечатват само по веднъж.
7-ма и 8-ма задача са разписани на лекцията и няма да ги разглеждаме тук. Ако имате допълнителни въпроси и/или алтернативни решения може да ги споделите в темата за да ги обсъдим заедно.