编写一个名为continuous的方法,它接受三个整数作为参数,如果它们是三个连续的数字则返回true;也就是说,如果数字可以排列成顺序,使得存在一些整数k,使得参数的值是k,k + 1和k + 2。如果整数不连续,则您的方法应返回false。请注意,订单并不重要;对于以任何顺序传递的相同三个整数,您的方法应返回相同的结果。 例如,连续呼叫(1,2,3),连续(3,2,4)和连续(-10,-8,-9)将返回true。连续(3,5,7),连续(1,2,2)和连续(7,7,9)的呼叫将返回false。
这是我到目前为止所得到的并且不断出现无限循环错误并跳过测试
public boolean consecutive(int x, int y, int z) {
Scanner kb = new Scanner(System.in);
x = kb.nextInt();
y = kb.nextInt();
z = kb.nextInt();
if (((x < y && x < z) && (y < z && ((y - x) == 1) && ((z - x) == 2)))
||((z < y && ((z - x) == 1) && ((y - x) == 2))))
{
return true;
} else if (((y < x && y < z)&& (x < z && ((x - y) == 1) && ((z - y) == 2)))
|| ((z < x && ((z - y) == 1) && ((x - y) == 2))))
{
return true;
} else if (((z < x && z < y)&& (y < x && ((y - z) == 1) && ((x - z) == 2)))
||((x < y && ((x - z) == 1) && ((y - z) == 2))))
{
return true;
} else {
return false;
}
答案 0 :(得分:1)
你所拥有的是严重的过度杀戮,对于那些没有在C中度过大部分职业生涯的人来说几乎是不可读的: - )
您应该始终首先争取可读性(以及可维护性),只有在绝对必要时才会恢复不太可读的代码。即使你确实还原,你应该记录你为什么以及你做了什么,这样下一个不得不维护你的代码的可怜的灵魂就不会诅咒你的名字。
对于这种特定情况,您尝试的内容可以通过更简单的代码实现,例如以下(伪代码):
def areConsecutive(a, b, c):
if a > b: swap a, b
if b > c: swap b, c
if a > b: swap a, b
return (b - a == 1) and (c - b == 1)
三个if
语句只是一个展开的冒泡排序,以确保a
,b
和c
按升序排列,然后您只需检查以确保它们之间的区别在这两种情况下都是一个。
没有必要将它们放入列表或数组中进行排序,因为排序三个项目相对容易(可以使用int t = a; a = b; b = t;
进行交换。)
就Java代码而言(一旦你将输入移动到外部它所属的函数),你最终会得到类似的东西:
bool areConsecutive(int a, int b, int c) {
int t;
if (a > b) { t = a; a = b; b = t; }
if (b > c) { t = b; b = c; c = t; }
if (a > b) { t = a; a = b; b = t; }
return (b - a = 1) && (c - b == 1);
}
答案 1 :(得分:0)
连续方法传递三个值,然后是你从控制台读取的原因。
创建一个大小为3个元素的数组。
使用
对数组进行排序Arrays.Sort
方法检查第二个和第一个数字之间的差异是1,第三个和第二个数字之间的差异是1.
代码:
public boolean consecutive(int x, int y, int z) {
int [] numbers = new int [3];
numbers[0] = x;
numbers[1] = y;
numbers[2] = z;
Arrays.sort(numbers);
boolean isConsecutive = (numbers[1]==numbers[0]+1)&&(numbers[2]==numbers[1]+1);
return isConsecutive;
}
答案 2 :(得分:0)
当您传递价值时,为何使用扫描仪? 删除这些线及其工作。您可以使用另一个逻辑来确定连续的数字。
public boolean consecutive(int x, int y, int z) {
if (((x < y && x < z) && (y < z && ((y - x) == 1) && ((z - x) == 2))) ||((z < y && ((z - x) == 1) && ((y - x) == 2)))) {
return true;
} else if (((y < x && y < z)&& (x < z && ((x - y) == 1) && ((z - y) == 2))) ||
((z < x && ((z - y) == 1) && ((x - y) == 2)))){
return true;
} else if (((z < x && z < y)&& (y < x && ((y - z) == 1) && ((x - z) == 2))) ||((x < y && ((x - z) == 1) && ((y - z) == 2)))){
return true;
} else
return false;
}
答案 3 :(得分:0)
只需删除这些代码:
Scanner kb = new Scanner(System.in);
x = kb.nextInt();
y = kb.nextInt();
z = kb.nextInt();
或使用像这样:
public class test{
public static void main(String[] args) {
Scanner kb = new Scanner(System.in);
x = kb.nextInt();
y = kb.nextInt();
z = kb.nextInt();
System.out.println("Result:" + consecutive(x, y, z));
}
public static boolean consecutive(int x, int y, int z) {
if (((x < y && x < z) && (y < z && ((y - x) == 1) && ((z - x) == 2))) || ((z < y && ((z - x) == 1) && ((y - x) == 2)))) {
return true;
} else if (((y < x && y < z) && (x < z && ((x - y) == 1) && ((z - y) == 2)))
|| ((z < x && ((z - y) == 1) && ((x - y) == 2)))) {
return true;
} else if (((z < x && z < y) && (y < x && ((y - z) == 1) && ((x - z) == 2))) || ((x < y && ((x - z) == 1) && ((y - z) == 2)))) {
return true;
} else {
return false;
}
}
}
答案 4 :(得分:0)
创建一个包含数字的列表,对其进行排序并对元素之间进行差异处理:
public static boolean myConsecutive(int x, int y, int z) {
final List<Integer> list = new ArrayList<>();
list.add(x);
list.add(y);
list.add(z);
Collections.sort(list);
return (list.get(2) - list.get(1) == 1 && list.get(1) - list.get(0) == 1);
}