FizzBuzz с помощью троичного условного оператора

Попробуйте ниже, проверьте мои комментарии:

CREATE OR REPLACE PACKAGE pkgVolunteer AS
  PROCEDURE uspaddVolunteer(varvl_ID NUMBER,
                            varvl_type NUMBER,
                            varName VARCHAR2,
                            varAge NUMBER,
                            varGenger VARCHAR2,
                            varBirthDate VARCHAR2,-- here needs space
                            varPhone NUMBER,
                            varEmail VARCHAR2,
                            varFaculty VARCHAR2,
                            varCourse VARCHAR2,
                            varYear NUMBER,
                            varcountry VARCHAR2,
                            varCity VARCHAR2 , --> needs comma
                                                        varstreet VARCHAR2,
                            varPostCode VARCHAR2);
END pkgVolunteer;
/
CREATE OR REPLACE PACKAGE BODY pkgVolunteer AS
PROCEDURE uspaddVolunteer(varvl_ID NUMBER, varvl_type NUMBER, varName VARCHAR2, varAge NUMBER, varGenger VARCHAR2, varBirthDate VARCHAR2, varPhone NUMBER, varEmail VARCHAR2, varFaculty VARCHAR2, varCourse VARCHAR2, varYear NUMBER, varcountry VARCHAR2, varCity VARCHAR2, varstreet VARCHAR2, varPostCode VARCHAR2) IS
BEGIN
INSERT INTO Volunteer
  (vl_id,
   vl_type,
   name,
   age,
   gender,
   birth_date,
   phone,
   email,
   faculty,
   course,
   year,
   addr_country,
   addr_city,
   addr_street,
   addr_postcode) VALUEs --> needs s 
  (varvl_ID,
   varvl_type,
   varName,
   varAge,
   varGenger,
   vBirthDate,
   varPhone,
   varEmail,
   varFaculty,
   varCourse,
   varYear,
   varcountry,
   varCity,
   varstreet,
   varPostCode);
END;
end; -- add another END;
/
8
задан Mechanical snail 24 September 2012 в 21:42
поделиться

5 ответов

Некоторые круглые скобки могли бы помочь:

puts (i%3 == 0) ? ((i%5 == 0) ? "FizzBuzz" : "Buzz") : ((i%5 == 0) ? "Fizz" : i)

Так, если я являюсь делимым 3, затем это проверяет, являюсь ли я также делимым 5. Если так, это печатает "FizzBuzz" иначе просто "Шум". Если я не являюсь делимым три, то это проверяет делимость 5 снова и печатает "Шипение" если так, иначе просто я.

16
ответ дан 5 December 2019 в 04:55
поделиться

Вот описание проблемы FizzBuzz, как указано в этой статье Jeff Atwood.

Запишите программу, которая печатает числа от 1 до 100. Но для кратных чисел трех печати "Шипение" вместо числа и для кратных чисел пяти печати "Шум". Для чисел, которые являются кратными числами и три и пять, печатают "FizzBuzz".

Тернарный оператор является краткой записью для если еще оператор. Общий формат:

cond ? evaluate_if_cond_is_true : evaluate_if_cond_is_false

Таким образом, если я пишу:

int isEven = (i % 2 == 0) ? 1 : 0;

Эквивалентно следующему коду:

if (i % 2 == 0) {
    isEven = 1;
} else {
    isEven = 0;
}

Где конусовидный i % 2 == 0, evaluate_if_cond_is_true 1 и evaluate_if_cond_is_false 0.

Хорошая вещь о тернарных операторах состоит в том, что они могут быть объединены. Это означает, что оператор для выполнения, когда любое условие оценивает к TRUE или FALSE, может быть другим тернарным оператором.

Позвольте помещает все условие в более читаемый вид:

i%3==0 ?
    i%5==0 ?
        "FizzBuzz"
        : "Buzz"
    : i%5==0 ?
        "Fizz"
        : i

И отображение этого к тому, если еще операторы легко с правилами, объясненными выше:

if (i%3==0) {
    if (i%5==0) {
        "FizzBuzz"
    } else {
        "Buzz"
    }
} else {
    if (i%5==0) {
        "Fizz"
    } else {
        i
    }
}

Это не действительный код, но потому что результат тернарного оператора встраивается в выражении результата, это используется в качестве входа для, помещает команду.

11
ответ дан 5 December 2019 в 04:55
поделиться

поток:

if (i%3 == 0) {              // multiple of 3
    if (i%5 == 0) {          // multiple of 3 and 5
        puts "FizzBuzz"
    } else {                 // not multiple of 5, only of 3
        puts "Buzz"
    }
} else (                     // not multiple of 3
    if (i%5 == 0) {          // multiple of 5, not of 3
        puts "Fizz"
    } else {                 // multiple of neither 5 nor 3
        puts i
    }
}
1
ответ дан 5 December 2019 в 04:55
поделиться

Троичным является основное если затем структура.

Вышеупомянутое эквивалентно...

if i%3 ==0
    if i%5 == 0
        "FizzBuzz"
    else
        "Buzz"
else
    if i%5 == 0
        "Fizz"
    else
        i

Или, использование некоторого parens...

puts i%3==0 ? ( i%5==0 ? "FizzBuzz" : "Buzz" ) : ( i%5==0 ? "Fizz" : i )
3
ответ дан 5 December 2019 в 04:55
поделиться

Для забавы вот иначе:

puts (1..100).map {|i| (fb = [["Fizz"][i%3],["Buzz"][i%5]].compact.join).empty? ? i : fb}

И другой:

(1..100).zip([nil,nil,"Fizz"]*34,[nil,nil,nil,nil,"Buzz"]*20).map {|a,b,c| b || c ? [b,c].join : a}
7
ответ дан 5 December 2019 в 04:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: