[Homework] Java Collections март 2016
Здравейте колеги качвам моето домашно тук цък .Приемам всякакви съвети за оптимизация и критики.Извинявам се че не мога да ви отговарям на коментарите които ми пишете но да работиш и учиш е много кофти.
Здравейте колеги качвам моето домашно тук цък .Приемам всякакви съвети за оптимизация и критики.Извинявам се че не мога да ви отговарям на коментарите които ми пишете но да работиш и учиш е много кофти.
Implement Recursive Binary Search
Още на пръв поглед можем да видим, че output на четвъртия input е грешен.
Тук е моята логика - http://pastebin.com/YwdjKSGr
Вие как мислите?
Донякъде си прав - в самото условие никъде не се казва че трябва да се посочи най-малкия индекс на който даденото се намира, а само да се посочи на коя позици се намира, независимо дали числото се среща повече от 1 път.
Здравей office_kanev тъкмо разгледах решението на 2ра задача. Установих, че не работи коректно. Може по чиста случайност да дава верни отговори на примерните тестове.
Аз пробвах с вход: hi yes yes bye yes bye hi
Output:
hi
yes yes
bye
yes
bye
hi
Грешката идва от това, че проверяваш само дали 2 съседни елемента са еднакви. Надявам се, че съм бил полезен.
С този вход, това което си получил е очакваният изход. Входът който даваш има само 1 поредица от еднакви стрингове
hi yes yes bye yes bye hi. Самата идея е да се провери дали настоящият елемент е еднакъв с предния, ако е еднакъв го отпечатва и добавя празно място, ако не е еднакъв слага нов ред и тогава го отпечатва .
Мале ужас. До сега си блъсках главата за да изкарвам всички срещания на всеки елемент от масива.Все пак успях, но било безполезно :). Така е като не чета внимателно условието. Мерси за пояснението.
В такъв случай за да не е капо колегата office_kanev с моят явен грешен коментар нека го посъветвам правилно.
Колега вместо да правиш излишни според мен маневри ето един по-добър според мен вариант на твоята задача.
Твоя вариант:
String prev = ""; String curr = ""; for (int i = 0; i < arr.length; i++) { if (i == 0) { System.out.print(arr[i] + " "); continue; } prev = arr[i - 1]; curr = arr[i]; if (curr.contains(prev)) { System.out.print(curr + " "); } else { System.out.println(); System.out.print(curr + " "); } }Подобрен вариант:
Scanner scan = new Scanner(System.in); String[] arr = scan.nextLine().split(" "); scan.close(); for (int i = 0; i < arr.length-1; i++) { if (arr[i].equals(arr[i+1])){ System.out.print(arr[i].concat(" ")); }else{ System.out.print(arr[i]); System.out.println(); } }По този начин спестяваме памет и време (което не е критично за задачата).
Също така използвам concat(" ") вместо arr[i] + " " което е по бавна операция според лектора ми от Basics нивото.
Между другото това scan.close(); ме озадачи в първия момент, тъй като аз лично никога не го затварям.Но ми беше полезно да го видя и предполагам вече ще го затварям и аз.
ето една кратка за 2 задачи import java.util.Scanner; public class SequencesofEqualStrings { public static void main(String[] args) { Scanner scanner =new Scanner(System.in); String[] array =scanner.nextLine().split(" "); for(int i = 0;i < array.length - 1;i++){ if(array[i].equals(array[i+1])){ System.out.print(array[i] + " "); }else{ System.out.println(array[i]); } } if(array[array.length-2].equals(array[array.length-1])){ System.out.print(array[array.length-1]); }else{ System.out.println(array[array.length-1]); } } }Това за какво ти е?
if(array[array.length-2].equals(array[array.length-1])){ System.out.print(array[array.length-1]); }else{ System.out.println(array[array.length-1]); }На последния пример на 2-ра задача мята Exeption заради този код.