16.02.2017, 01:34
|
Новичок на форуме
|
|
Регистрация: 16.02.2017
Сообщений: 1
|
|
Помогите сократить некрасивый код
Как сделать две проверки при помощи циклов? Нужно проверить, чтобы были введены числа, при этом разные и говорилось, в чем ошибка, в голову пришло только такое, выглядит убого, есть ли варианты сократить? Очень не хочется приучатся к быдлокоду
while(isNaN(a) || isNaN(b) || isNaN(c) || (a === b) || (b === c) || (c === a)){
while(isNaN(a) || isNaN(b) || isNaN(c)){
alert('можно вводить только числа');
a = +prompt('число 1');
b = +prompt('число 2');
c = +prompt('число 3');
}
while((a === b) || (b === c) || (c === a)){
alert('числа должны быть разные');
a = +prompt('число 1');
b = +prompt('число 2');
c = +prompt('число 3');
}
}
Последний раз редактировалось verynew, 16.02.2017 в 01:51.
|
|
16.02.2017, 06:08
|
|
Профессор
|
|
Регистрация: 16.09.2009
Сообщений: 253
|
|
var a,b,c,d,e;
while((d = isNaN(a * b * c)) || (e = (a == b) || (b == c) || (c == a))) {
alert(d ? 'можно вводить только числа' : 'числа должны быть разные');
a = prompt('число 1') || NaN;
b = prompt('число 2') || NaN;
c = prompt('число 3') || NaN;
}
|
|
16.02.2017, 08:53
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
verynew,
function fn(length, array) {
array = array || [];
var a = array.length + 1,
a = +prompt("число " + a,"");
isNaN(a) && (a = "можно вводить только числа");
- 1 !== array.indexOf(a) && (a += " это число уже есть : "+array+" ,введите другое");
a == +a ? (--length, array.push(a)) : alert(a);
return length ? fn(length, array) : array
};
alert(fn(3));
|
|
16.02.2017, 10:52
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
смысл тот же, что у рони
alert(promptNumbers(3));
/**
* @param {Number} count
* @returns {Array<Number>}
*/
function promptNumbers(count) {
let arr = new Array(count);
for (let i = 0, n; i < count; i++) {
while (true) {
n = Number(prompt('Enter a number'));
if (isNaN(n)) {
alert(`It is not a number!`);
continue;
}
if (contains(arr, n)) {
alert(`The number "${n}" already exists!`);
continue;
}
arr[i] = n;
break;
}
}
return arr;
}
function contains(arr, needle) {
return arr.indexOf(needle) !== -1;
}
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 16.02.2017 в 11:05.
|
|
16.02.2017, 11:03
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
nerv_,
а если while(true) заменить на
for(let i = 0, n; i < count;)
//...
arr[i++] = n;
?
|
|
16.02.2017, 11:06
|
|
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
рони, то не будет удовлетворять требованиям из первого поста Первый цикл обеспечивает количество, второй бизнес-логику. Собственно, второй цикл можно вынести в отдельную функцию при желании.
Там просто форматирование куда-то улетело. Я прошелся бьютифайером и обновил код выше.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Последний раз редактировалось nerv_, 16.02.2017 в 11:10.
|
|
16.02.2017, 11:20
|
|
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,135
|
|
nerv_,
не понял твоего сообщения, всё же работает, что не так?
alert(promptNumbers(3));
/**
* @param {Number} count
* @returns {Array<Number>}
*/
function promptNumbers(count) {
let arr = new Array(count);
for (let i = 0, n; i < count; ) {
n = Number(prompt('Enter a number'));
if (isNaN(n)) {
alert(`It is not a number!`);
continue;
}
if (contains(arr, n)) {
alert(`The number "${n}" already exists!`);
continue;
}
arr[i++] = n;
}
return arr;
}
function contains(arr, needle) {
return arr.indexOf(needle) !== -1;
}
|
|
16.02.2017, 11:22
|
Профессор
|
|
Регистрация: 27.11.2015
Сообщений: 2,899
|
|
Вариант nerv без for
alert(promptNumbers(3));
/**
* @param {Number} count
* @returns {Array<Number>}
*/
function promptNumbers(count) {
let arr = new Array(count),
i = 0;
while (i < count) {
n = Number(prompt('Enter a number'));
if (isNaN(n)) {
alert(`It is not a number!`);
continue;
}
if (contains(arr, n)) {
alert(`The number "${n}" already exists!`);
continue;
}
arr[i] = n;
i++;
}
return arr;
}
function contains(arr, needle) {
return arr.indexOf(needle) !== -1;
}
|
|
|
|