+ 2

Can anyone tell me why it is not working when I turn sorted into true ,but it's working when I turn it into false?

https://code.sololearn.com/czk4QBh7RUj8/?ref=app

27th Apr 2021, 4:19 AM
Atul [Inactive]
17 Answers
+ 1
Atul The trick is that both booleans should be true at the beginning. And only if the conditions are not fulfilled they should get false. For example: 4 1 3 2 5 In your case, the first boolean gets true but not false again. So it prints sorted. You would need an extra condition. But if you do it the other way around: 1 < 3 sorted1 keeps true 3 < 2 sorted1 gets false Same for sorted2: 1 > 3 sorted2 gets false And this solves also your problem with one value arrays. Btw: If you want you can add a break statement: if(sorted1 == false && sorted2 == false) break; If both are false you don't need to check the other values.
27th Apr 2021, 3:18 PM
Denise Roßberg
Denise Roßberg - avatar
+ 1
Atul Maybe you confused it or I explained it not good enough. boolean sorted = false; makes your code complicated. if you find a sorted element it need to get true if it is true and you find unsorted elements it need to get false if it is false you need to prevent that it gets true again But you also need to provide that sorted can get true at the first time. boolean sorted = true; Here you only need to check if you find unsorted elements, sorted gets false and you are done. The other elements are not relevant.
27th Apr 2021, 4:24 PM
Denise Roßberg
Denise Roßberg - avatar
+ 1
In general if you are not sure if you should initialize a boolean with true or false: What do you want to check? What is easier to check? Just two examples: You want to check if an array contains a number. Searching for the number is easy, you just need one condition. So you can initialize your boolean with false. boolean containsNum = false; for(int i = 0; i < arr.length; i++){ if(yourNumber == arr[i]) containsNum = true; } if you find the number -> containsNum gets true -> number found else containsNum stays false -> number not found You want to check if a number is prime. In this case it is much easier to check if it is has divisors, instead to proof that this number has no divisors. You initialize your boolean with true and if you find divisors your boolean gets false. boolean isPrime = true; for(int i = 2; i < yourNumber; i++){ if(yourNumber % i == 0) isPrime = false; } If you find a divisor -> isPrime gets false -> not a prime else isPrime stays true -> prime number
27th Apr 2021, 5:28 PM
Denise Roßberg
Denise Roßberg - avatar
0
EverVev What can be done for it? Any hint?
27th Apr 2021, 6:19 AM
Atul [Inactive]
0
Denise Roßberg Can I make a function for both ascending and descending sorts and compare them with the input value?
27th Apr 2021, 3:34 PM
Atul [Inactive]
0
Atul You mean all in one? Then I would just copy your loop into the method. public static boolean isSorted(int[] arr]{ if(arr.length <= 1) return true; boolean sorted1 = true; boolean sorted2 = true; //your loop goes here return sorted1 || sorted2; }
27th Apr 2021, 3:45 PM
Denise Roßberg
Denise Roßberg - avatar
0
Denise Roßberg I mean that I will make 2 separate functions for both ascending order and descending order. And compare it to the input values in the main method
27th Apr 2021, 3:49 PM
Atul [Inactive]
0
Btw: I tested a bit around and I would say it is just too complicated if you start with sorted = false. 1) sorted need to get true if it is sorted 2) it need to get false if it is not sorted 3) you need to prevent getting true again Starting with false keeps your code easier. (Just for the clarification of your first question: It would work but it is laborious) About your two methods: public static boolean isDescending(int[] arr){ if(arr.length <= 1) return true; put your loop here, just change the condition: if(arr[i] < arr[i+1]) return false; //end loop return true; } Same for ascending.
27th Apr 2021, 4:07 PM
Denise Roßberg
Denise Roßberg - avatar
0
Denise Roßberg Can you please tell me the benefits of initialising Boolean sorted=false?
27th Apr 2021, 4:10 PM
Atul [Inactive]
0
For example theese two cases: a) 1 2 3 4 5 b) 1 2 4 3 5 Look at first to case b) sorted gets true, but need to get false after 4 < 3. 3 < 5 would make it true but sorted is false and should not get true again. Now look at the sorted case a) sorted is false but need to get true. Rember for cases like b) you need to prevent a switch from false to true. I guess you would need a another boolean: boolean firstTime = false; boolean sorted = false; if(firstTime == false && arr[i] < arr[i+1]){ sorted = true; firstTime = true; } if(arr[i] > arr[i+1]) sorted = false; You are producing more lines of code than you would need to solve your problem.
27th Apr 2021, 4:47 PM
Denise Roßberg
Denise Roßberg - avatar
0
Oh means first initialise it with true. And after that prove that it is sorted or not? Yes or no
27th Apr 2021, 4:48 PM
Atul [Inactive]
0
Don't know why the answers and the question is getting downvotes?
27th Apr 2021, 4:49 PM
Atul [Inactive]
0
Hm I am not sure if I understand your question. About the downvotings, I have no idea who did it.
27th Apr 2021, 4:52 PM
Denise Roßberg
Denise Roßberg - avatar
0
Denise Roßberg No you understood the question and thanks for detailed explanation.
27th Apr 2021, 4:55 PM
Atul [Inactive]
0
Denise Roßberg Do initialising Boolean with false saves time complexity sometimes?
27th Apr 2021, 5:49 PM
Atul [Inactive]
0
Atul I am not sure but I guess you would need a really large array to see a difference.
27th Apr 2021, 6:55 PM
Denise Roßberg
Denise Roßberg - avatar
- 1
Don't know why are you doing all this nonsense, you just want to check if the array is in increasing or decreasing order, right? You can just loop through the array and check just the last element if it was big or small (depending on your requirement), if the check returns true, return "not sorted" from the function, if all checks have returned false, then just return "sorted" from the function.
28th Apr 2021, 12:27 AM
Amit kumar
Amit kumar - avatar