java - 分支语句 - 升序或降序整数
问题描述
学习 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);
}
}
}
}
解决方案
让我们首先阅读所有数字:
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");
}
推荐阅读
- python - 如何在python中的一个单元格中合并多个值
- c - 后缀在 C 中得到错误的值
- r - 带 rvest 的循环
- excel - VBA 中的对象引用问题
- css - 在 JavaFX 中的单个 TextField 中支持多种语言字体
- eclipse - 如何在 Eclipse 中设置 IBM Mobile First 版本 7.1 - IBM mobile first 在 Eclipse 市场中不可用
- dictionary - Java8 将 Object 属性映射到 List Stream 中的另一个属性
- node.js - 为什么这些 if 语句不起作用,对我所说的任何内容的响应都是“嘿”,这应该是第一个 if 语句的响应
- php - 多维 PHP 值数组未正确显示
- c# - FedEx Rating API 在 Sandbox Postmen 环境中不起作用。错误为“禁止操作”