我的朋友让我帮他完成作业,我被困住了。这是作业:
用户必须在数组中输入第一个提示框中的元素数量。然后,他将获得每个号码的提示框。现在,输出必须是数组中的最大数字。但这根本行不通。使用下面的代码,我总是得到最高位数的元素。 (如果数字为负数或正数,则无关紧要,代码不能正常工作)
这是我的代码(它甚至不能在jsfiddle中工作,只在我的文件中)
<button onclick="duzinaNiza()">Do it!</button>
这是JavaScript
function duzinaNiza() {
var brClanova = prompt("Enter the number of array elements:");
if (brClanova > 0) {
var niz = new Array();
for (i=0; i<brClanova; i++) {
var redniBr = i+1;
niz[i] = prompt("Enter "+ redniBr +". array number:");
\\ prompt for geting each array element
}
var maximum = niz[0];
for (a=0; a<brClanova; a++) {
if (maximum < niz[a]) {
maximum = niz[a];
}
}
document.write("Greatest value in array is: " + maximum);
}
}
我朋友的proffesor不想使用函数来排序数组,这必须用循环来完成。
P.S。是的,我知道......但是不要问关于document.write的东西,它必须以那种方式打印......
答案 0 :(得分:1)
这是因为输入是一个String,你必须将它解析为一个Integer。像:
niz[i] = parseInt(prompt("Enter "+ redniBr +". array number:"), 10);
答案 1 :(得分:1)
试试这个:
function duzinaNiza() {
var brClanova = prompt("Enter the number of array elements:");
if (brClanova > 0) {
var niz = new Array();
for (i=0; i<brClanova; i++) {
var redniBr = i+1;
niz[i] = parseInt(prompt("Enter "+ redniBr +". array number:"));
// prompt for geting each array element
}
var maximum = niz[0];
for (a=0; a<brClanova; a++) {
if (maximum < niz[a]) {
maximum = niz[a];
}
}
document.write("Greatest value in array is: " + maximum);
}
}
答案 2 :(得分:1)
尝试this,[提示:我刚刚使用'+' operator
将值转换为number
(来自prompt
的值。)。如果输入的值无法转换为数字,'+' operator
将返回NaN
。所以在这种情况下,你应该使用isNan
函数来摆脱它。]
duzinaNiza = function () {
var brClanova = prompt("Enter the number of array elements:");
if (brClanova > 0) {
var niz = new Array();
var maximum;
for (i=0; i<brClanova; i++) {
var temp = +prompt("Enter "+ i+1 +". number:");
if(i===0) { maximum = temp }
else { maximum = (temp > maximum)?temp:maximum; }
}
alert("Greatest value in array is: " + maximum);
}
}
答案 3 :(得分:1)
问题在于,当您想要比较两个数字时,您要比较两个字符串。 换句话说,以下表达式在javascript中是LEGAL并且计算结果为true:
if('4' > '393939393'){
//true! string '4' is greater than string '3' (first char of '393939393')
}
您应该执行的操作是转换从函数提示符接收的值,因此将其视为数字。您可以使用以下功能执行此操作:
parseInt(prompt("Enter "+ redniBr +". array number:"), 10);
第一个参数是您要转换为数字的值,而第二个参数是数字的基数(或“基数”)。
答案 4 :(得分:1)
所以,这里的主要问题是你不是把你的数字威胁为“数字”,而是作为字符串。方法prompt
返回一个字符串,因此您需要转换它们:
function duzinaNiza() {
var brClanova = +prompt("Enter the number of array elements:");
if (!brClanova)
return;
var niz = [];
for (var i=0; i < brClanova; i++) {
var redniBr = i + 1;
niz[i] = +prompt("Enter "+ redniBr + ". array number:");
}
var max = niz[0];
for (var a = 1; a < brClanova; a++) {
if (max < niz[a])
max = niz[a];
}
document.write("Greatest value in array is: " + max);
}
我使用了Unary Plus Operator。
只是要知道,在JS中,您实际上可以使用Math.max
来避免最后一个循环来获取数字数组的最大值。所以而不是:
var max = niz[0];
for (var a = 1; a < brClanova; a++) {
if (max < niz[a])
max = niz[a];
}
document.write("Greatest value in array is: " + max);
你将拥有:
var max = Math.max.apply(null, niz);
document.write("Greatest value in array is: " + max);
在这种情况下,你甚至不需要一元加号运算符,因为Math.max
会处理它。
答案 5 :(得分:1)
您不需要parseInt-如果您减去可以转换为数字的字符串,它们将被转换。因此,您可以从下一个数字中减去最大值,并查看它是否留下余数。
另外,parseInt会破坏小数,所以你不会知道1.5大于1。
您的评论使用了错误的字符 - “('\'应该是'//')
function duzinaNiza(){
var brClanova= prompt("Enter the number of array elements:");
if(brClanova>0){
var niz= new Array();
for(var i= 0;i<brClanova;i++){
var redniBr= i+1;
niz[i]= prompt("Enter "+ redniBr +". array number:");
//prompt for geting each array element
}
var maximum= niz[0];
for(var a= 0;a<brClanova;a++){
if(niz[a]-maximum>0){
maximum= niz[a];
}
}
document.write("Greatest value in array is: " + maximum);
}
}
答案 6 :(得分:0)
修改后的代码JSFIDDLE
function duzinaNiza() {
var brClanova = prompt("Enter the number of array elements:")*1; //convert string to intger
if (brClanova > 0) {
var niz = new Array();
for (i=0; i<brClanova; i++) {
var redniBr = i+1;
niz[i] = prompt("Enter "+ redniBr +". array number:")*1;
// prompt for geting each array element
}
var maximum = niz[0];
for (a=0; a<brClanova; a++) {
if (maximum < niz[a]) {
maximum = niz[a];
}
}
document.write("Greatest value in array is: " + maximum);
}
}