I am facing problem in solving the question below:- (can someone please help????)
Write a program that reads a sequence of integer numbers and outputs true if the sequence is ordered (in ascending or descending order), otherwise, false. Keep in mind, if a number has the same value as the following number, it does not break the order. The sequence ends with 0. Do not consider this number as a part of the sequence. The sequence always has at least one number (excluding 0).
code which I wrote(For this code I am getting runtime error).....
class Main {
public static void main(String[] args) {
// put your code here
Scanner scanner = new Scanner(System.in);
int number1 = scanner.nextInt();
int number2;
int number3;
int number4;
int prev;
int mid;
int next;
int flag = 1;
boolean val = true;
while (val) {
if (number1 > 0) {
number2 = scanner.nextInt();
if (number2 > 0) {
number3 = scanner.nextInt();
if(number3 > 0){
prev = number1;
mid = number2;
next = number3;
if (prev >= mid && mid >= next || prev <= mid && mid <= next) {
number4 = scanner.nextInt();
prev = number2;
mid = number3;
next = number4;
flag = 1;
} else {
break;
}
} else {
if (number1 >= number2 && number2 >= number3 || number1 <= number2 && number2 <= number3) {
flag = 1;
} else {
flag = 0;
}
}
} else {
if (number1 >= number2 || number1 <= number2) {
flag = 1;
} else {
flag = 0;
}
}
} else {
flag = 0;
}
}
if (flag == 1) {
System.out.println(true);
} else {
System.out.println(false);
}
}
}```
Your code was a little bit messy, I will post a cleaned up version and explain the single steps.
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//firstable, you do not need to declare seperate variables for the number
//you want to enter, but you can use those (here currentNumber is the
//number typed in most recently, midNumber is the number before that,
//previousNumber is the one before that); they are initialized with 0 for
//reasons you will they later
int currentNumber = 0, midNumber = 0, previousNumber = 0;
boolean flag = false;
//a while loop, which asks for new numbers, as long as the user does not
//break it
while(true){
//the user enters a number, which is the new current number
System.out.print("Enter a number: ");
currentNumber = scanner.nextInt();
//if the entered number is 0 and there was one number entered before,
//the while loop breaks and the process ends
if(currentNumber == 0 && midNumber != 0){
break;
}
//there have to be at least three numbers in the sequence for it to be
//tested, otherwise the sequence is always true, so there have to be a
//midNumber and a previousNumber
if(previousNumber != 0 && midNumber != 0){
flag = false;
//the flag is only true, if the three entered numbers are either
//descending or ascending
if(
(previousNumber <= midNumber && midNumber <= currentNumber)
||
(previousNumber >= midNumber && midNumber >= currentNumber)
){
flag = true;
}
}
//the previous number is set to the midNumber, the midNumber is set to
//the currentNumber
previousNumber = midNumber;
midNumber = currentNumber;
//since the process has not been terminated by the user, the while-loop
//starts over
}
// for memory reasons, the scanner has to be closed, since it will not be
//used after the while-loop, it will be closed here
scanner.close();
//the flag is printed; true if the sequence is true, false if otherwise
System.out.println(flag);
}
}