Is a List Sorted?

Здравейте.
Трябва ми малко помощ за тази задача. Проблема е принтирането. Пробвах с друг масив boolean, но отговора става грешен. Също пробвах да преместя принта на следващия ред след скобите, но тогава показва само последния резултат. А както е сега кода показва след N и след всеки ред.

Здравей,

на реда, където печаташ, вместо това може например да добавяш стрингове “true” / “false” към някакъв String [] result и най-накрая да отпечаташ само този array с резултатите с още един един loop.

Също така,
int N = scanner.nextInt();

тук или добави на нов ред само това: scanner.nextLine();
или (по-добре) използвай направо int N = Integer.parseInt(scanner.nextLine());,
така, че кодът ти да очаква следващия инпут на нов ред, а не на същия.

Успех!:slight_smile:

Здравей отново!

Тази задача немога да я докарам да работи както трябва. Пробвах доста варианти с масива result, но немога да го накарам да изписва True или False след въвеждането. А след като добавих int N = Integer.parseInt(scanner.nextLine()); при примерно да напиша 2 след това масивите ме кара да пиша и трети масив.

Да, извинявай, забравих да ти кажа за това
for (int a = 0; a <= N; a++) -> тук трябва да е или
for (int a = 0; a < N; a++) или (int a = 1; a <= N; a++) , защото от 0 до N включително са N+1 броя инпут :wink:

тук реално нямаш полза от втория array, както си го написал - всеки елемент от втория масив взема стойността на елемента от първия, т.е. правиш си 2 array-a с еднакви елементи с еднаква последователност. Може би идеята ти е била вторият масив да е с числа, а не със стрингове, вместо по-нататък в кода да ги парсваш към int ? Ако не - можеш спокойно да си работиш и само със String n[] по-нататък:

String n[] = scanner.nextLine().split(",");
String list[] = new String[n.length];
for (int i = 0; i < list.length; i++) {
list[i] = n[i];
}

тук if-else-a не би трябвало да е точно такъв - да кажем при подаден инпут 5,6,7,1 ще отпечаташ true (6>5), true (7>6), false (1>7) и всички тези резултати ще се отнасят само до 1 input array, съответно ще отпечаташ доста повече отговори и системата няма да ги приеме изобщо като валидни.

for (int i = 0; i < list.length - 1; i++) {
                int test1 = Integer.parseInt(list[i]);
                int test2 = Integer.parseInt(list[i + 1]);
                if (test1 > test2) {
                    result[i] = "false";
                    break;
                }
                 else {result[i] = "true";} 
            }

И последно, печатането на резултата го изкарай от всички останали цикли, то си е най накрая и съвсем отделно там си циклиш масива с резултатите:

    for (int i = 0; i < result.length; i++) {
        System.out.println(result[i]);
    }

Понеже съм сигурна, че не успявам да го обясня като хората, виж преработения ти код и ако има нещо неясно - питай https://pastebin.com/enDivGTX

Мога да ти дам и друга идея за решение, ако ти се занимава - клонираш си всеки input array, сортираш го (с методите на array, не ръчно - Arrays.sort() :), и проверяваш дали са еднакви (пак с методите от array - Arrays.equals()). Съответно в String [] result ще нанасяш резултатите от тези проверки и накрая ще ги отпечатваш.

1 Like

Здравей @denski.bg

Много благодаря за отделеното време. Всичко работи както трябва.

Само едно нещо не разбрах: как да напълня масив с елементи само с 1 масив. Пробвал съм и с Int масиви. Тогава даже немога до разделянето между елементите (split()).

        String n[] = scanner.nextLine().split(",");
        //нямаш нужда от този следващ array, можеш да си работиш с горния
        String list[] = new String[n.length];

това String n[] ти е готов масив от стрингове - правиш го като вземаш инпут-а и го разделяш на отделни стрингове там, където има “,” -> това значи scanner.nextLine().split(",")
Т.е. ако инпут-ът ти е 3,4,5 , този ред директно ти създава String n[] = {“3”, “4”, “5”}

Следователно този String n[] можеш да го прекръстиш просто от n на list и да изтриеш тези 3 реда -

    String list[] = new String[n.length];
    for (int i = 0; i < list.length; i++) {
        list[i] = n[i];
    }

Другият вариант е такъв - да си направиш втория масив директно с integers и по-нататък да си работиш само с него:

    String n[] = scanner.nextLine().split(",");
    int  list[] = new int[n.length]; 
    for (int i = 0; i < list.length; i++) {
        list[i] = Integer.parseInt(n[i]);
    }

A това, за което питаш, ако е нещо такова кратко дали е възможно - не:)
int n[] = scanner.nextInt().split(",");

1 Like