Arrays Workshop Sort Numbers

Здравейте, успешно приключих уъркшопите докато не се сблъсках с масивите и запецнах още на първата задача. :slight_smile:

Въобще не мога да схвана как да създам масив, който да не е ициализиран още от самото начало, пробвах с фор луупове, и какво ли не, но нищо не стана.

Бъркам някъде генерално и не мога да продължа напред. Ще съм благодарен на насоки!

Благодаря!

1 Like

Здравей Теди,

отностно точно тази задача (Sort numbers) имаш няколко варианта:

  • можеш да разучиш как се използва ArrayList;
  • може да прочетеш числата като String-ов масив и да ги разделиш;

Успех :slight_smile:

Гледах го това със стринговете, но по-скоро ми бяга цялото нещо.

Ще прочета това за ArrayList.

Предполагам се ползва адски често, защото в реалния живот масивите не знаем с колко точно стойности ще са, нали?

И аз започвам от началото. Най-вече как се създава масив, тип на данните в него, въвеждане на променливите, определяне на големината и в последствие достъпване на променливите при някакви условия. Вече тези условия: или някаква “for-for” конструкция; “while”…там вече почва да превърта системата.

Здравейте,

https://pastebin.com/3uLwgXxy - ето кодът ми.

Принтирам правилно, но как мога да премахна скобите от двете страни?

Благодаря!

Здравей Теди,

тук може да видиш няколко варианта и да избереш този, който ти се вижда най-удачен/лесен. Също така в този сайт може да намериш отговор на доста други подобни въпроси.

Успех :slight_smile:

https://pastebin.com/MPLahwiq - в ИДЕ-то работи, но в Judge не.

Също така имам проблем с кода, защото като се впишат двуцифрени числа - греда.

Логиката ми правилна ли е, че тази задача първо трябва да поеме Стринг, който след това да се парсне към инт?

Пробвах с Интеджер АрейЛист, но се счупва, защото инпутът на един ред го приема като Стринг. В Интеджер масивите .сплит не работи като метод.

Продължавам да цикля. :slight_smile:

Здравей Теди,

Пробвай какво ще изпринтираш ако входа е -1,0,1 и ще разбереш, защо се чупи кода.

Помисли, как да се справиш с тази част от задачата и всичко ще е 100/100.

Поздрави,

Мишо

Да, видях. Една запетайка бях изпуснал.

Обаче това не решава проблема, когато се сравняват двуцифрени числа.

Ето решение на твоя проблем:

string input = Console.ReadLine();
int[] arr = input.Split(’,’).Select(x => int.Parse(x)).ToArray();

Като цяло си прегледай логиката, понеже дори след като фикснеш проблема с двуцифрените ще гърми.

Реших задачата - ето и кодът. https://pastebin.com/DYakVEUW

Като цяло ми се струва безумно тежко решението ми - създавам три масива. :smiley:

Също така не разбирам на ред 14 и 20 защо for loop брояча ми е .lenght, а не length - 1 както би трябвало да е.

Като го оставих на .length мина напълно през Judge.

ЗдравейТеди,

Това се получава понеже двата цикъла въртят до по малко от array.Length.

Ако имаш array.Length= 10 и му дадеш да върти от 0 до i < array.Length, реално ще извърти (0,1,2,3,4,5,6,7,8,9), което реално са точно 10 итерации.

Ако имаш Array в който има само един елемент, неговия индекс ще е [0], а array.Length ще е равен на 1.

Моя съвет е, като се чудиш защо става нещо да debug-ваш.

Поздрави,

Мишо

Refer this resource on arraylist in java.

Hi Tedi,
Great job on the task. I feel like I could never have done it your way at least at this level of knowledge.
Below am sharing my solution. I used only the information we have been given so far in the prep course. I hope it will be helpful for you or others looking in the forum as another point of view on the task.

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);

String[] list = sc.nextLine().split(", ");
int[] result = new int[list.length];
for ( int n = 0; n < result.length; n++ ) {
result[n] = Integer.parseInt(list[n]);
}
int position = 0;
for (int n = 0; n < result.length; n++) {
for (int i = n + 1; i < result.length; i++) {
if (result[n] < result[i]) {
position = result[n];
result[n] = result[i];
result[i] = position;
}
}
}
for (int n = 0; n<result.length-1; n++) {
System.out.print(result[n] + ", ");
}
System.out.println(result[result.length-1]);

}

}
3 Likes