2016-10-14 3 views
-3

Напишите метод с именем последовательный, который принимает три целых числа в качестве параметров и возвращает 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

Ahhhh мои глаза :(: -/ –

+1

Бесконечный цикл? Без циклов или рекурсивный вызов ... Я не буду комментировать этот algo – AxelH

+0

Хорошо расскажите об этом коде ... почему вы получили 'x, y, z' в параметрах, что такое vlaue? никогда не закрывайте сканер, это плохо. И для логики вы должны попробовать математику вместо условия PURE или просто найти меньшее и большее число ... – AxelH

ответ

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; 
} 
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; 
} 
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; 
     } 
    } 
} 
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); 
} 
0

Что имеется в наличии серьезный избыточна и в значительной степени нечитаемым для тех, кто не провел большую часть своей карьеры в 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); 
} 
Смежные вопросы