首页 > 解决方案 > 分支语句 - 升序或降序整数

问题描述

学习 Java 几个月了,之前没有开发经验,但我决心学习这个。这是我的第一篇文章。这是问题:

编写一个程序,读取一个整数序列,如果序列是有序的(按升序或降序),则输出 true,否则为 false。请记住,如果一个数字与后面的数字具有相同的值,它不会破坏顺序。序列以 0 结尾。不要将此数字视为序列的一部分。序列总是至少有一个数字(不包括 0)。

样本输入 1:9 8 7 6 5 4 3 2 1 0

样本输出 1:真

样本输入 2:1 2 3 3 9 0

样本输出 2:真

样本输入 3:1 2 5 5 2 3 0

样本输出 3:假

我已经阅读了解决此问题的其他帖子,但我的代码代表了我迄今为止所学和准理解的概念。我的直觉是,为了在产生“真”或“假”之前遍历所有输入的值,可能需要一个列表。但是,我不确定如何在列表中使用 Scanner 以及如何在“for 循环”和/或“if”语句中使用列表。到目前为止,这是我的代码,它产生了超出时间限制的错误。预先感谢您的帮助。

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int input = scanner.nextInt();

        for (int i = 1; i > 0; i++) {

            if (input >= i || input == i + 1) {
            System.out.println(true); 
            }  
            else if (input <= i || input == i - 1) {
            System.out.println(true);
            }
            else {
            System.out.println(false);
            }
        }   
    }
}

标签: java

解决方案


让我们首先阅读所有数字:

Scanner scanner = new Scanner(System.in);
List<Integer> numbers = new ArrayList<>(); //use a list to store
int number = -1;
while(number != 0) { //go until 0
    System.out.println("Enter a positive int or 0 to stop!");
    number = scanner.nextInt(); //read integer
    if(number != 0) {
        numbers.add(number); //save it, but only if it's not 0
    }
}

现在我们在列表中有所有数字。可以编写一些方法来检查它们是否在升序:

public static boolean isAscending(List<Integer> numbers) {
    int number, next;
    if(numbers.size()==1) return true; // edge cases
    if(numbers.size()==2) {
       return numbers.get(0) <= numbers.get(1);
    }
    for(int i=0; i<numbers.size() - 2; i++) { //from first to one before last
        number = numbers.get(i);
        next = numbers.get(i+1);
        if(next < number) { //next is NOT bigger then the current (equal accepted)
            return false;        
        }
    }
    return true; //if we got here then it's ascending
}

降序方法类似,但在比较数字时使用“>”。然后,只需在输入列表中调用它们即可:

boolean ascending = isAscending(numbers);
boolean descending = isDescending(numbers);
if(ascending || descending) {
    //result is TRUE here
    System.out.println("TRUE");
} else {
    //result is FALSE here
    System.out.println("FALSE");
}

推荐阅读