 
			
				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,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		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,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		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,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		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;
}
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 
 
 
 
	 | 
 
 
 |