【发布时间】:2016-02-16 07:11:51
【问题描述】:
我正在尝试制作一个带有 HTML 和 Javascript 用户界面的计算器。我已经修复了很多错误,但仍然存在以下问题:如果第二个运算符超过一位,则答案错误,除法不起作用。我还很新,我知道我的代码效率低下而且 300 行太长,但是有人可以幽默我并解释我的错误吗?
var resultline_str = " ";
var multidigit = 0
var space = 0
var operating = [];
function type1(){
resultline_str += " 1";
document.getElementById('result').innerHTML = resultline_str;
if(multidigit === 0){
operating.push(1);
multidigit = 1;
}else{
if(space === 0){
var n = operating[0]
n = operating[0].toString();
n += '1';
n = parseInt(n);
operating[0] = n;
}else{
var n = operating[2]
n = operating[2].toString();
n += '1';
n = parseInt(n);
operating[2] = n;
};
};
};
function type2(){
resultline_str += " 2";
document.getElementById('result').innerHTML = resultline_str;
if(multidigit === 0){
operating.push(2);
multidigit = 1;
}else{
if(space === 0){
var n = operating[0]
n = operating[0].toString();
n += '2';
n = parseInt(n);
operating[0] = n;
}else{
var n = operating[2]
n = operating[2].toString();
n += '2';
n = parseInt(n);
operating[2] = n;
};
};
};
function type3(){
resultline_str += " 3";
document.getElementById('result').innerHTML = resultline_str;
if(multidigit === 0){
operating.push(3);
multidigit = 1;
}else{
if(space === 0){
var n = operating[0]
n = operating[0].toString();
n += '3';
n = parseInt(n);
operating[0] = n;
}else{
var n = operating[2]
n = operating[2].toString();
n += '3';
n = parseInt(n);
operating[2] = n;
};
};
};
function type4(){
resultline_str += " 4";
document.getElementById('result').innerHTML = resultline_str;
if(multidigit === 0){
operating.push(4);
multidigit = 1;
}else{
if(space === 0){
var n = operating[0]
n = operating[0].toString();
n += '4';
n = parseInt(n);
operating[0] = n;
}else{
var n = operating[2]
n = operating[2].toString();
n += '4';
n = parseInt(n);
operating[2] = n;
};
};
};
function type5(){
resultline_str += " 5";
document.getElementById('result').innerHTML = resultline_str;
if(multidigit === 0){
operating.push(5);
multidigit = 1;
}else{
if(space === 0){
var n = operating[0]
n = operating[0].toString();
n += '5';
n = parseInt(n);
operating[0] = n;
}else{
var n = operating[2]
n = operating[2].toString();
n += '5';
n = parseInt(n);
operating[2] = n;
};
};
};
function type6(){
resultline_str += " 6";
document.getElementById('result').innerHTML = resultline_str;
if(multidigit === 0){
operating.push(6);
multidigit = 1;
}else{
if(space === 0){
var n = operating[0]
n = operating[0].toString();
n += '6';
n = parseInt(n);
operating[0] = n;
}else{
var n = operating[2]
n = operating[2].toString();
n += '6';
n = parseInt(n);
operating[2] = n;
};
};
};
function type7(){
resultline_str += " 7";
document.getElementById('result').innerHTML = resultline_str;
if(multidigit === 0){
operating.push(7);
multidigit = 1;
}else{
if(space === 0){
var n = operating[0]
n = operating[0].toString();
n += '7';
n = parseInt(n);
operating[0] = n;
}else{
var n = operating[2]
n = operating[2].toString();
n += '7';
n = parseInt(n);
operating[2] = n;
};
};
};
function type8(){
resultline_str += " 8";
document.getElementById('result').innerHTML = resultline_str;
if(multidigit === 0){
operating.push(8);
multidigit = 1;
}else{
if(space === 0){
var n = operating[0]
n = operating[0].toString();
n += '8';
n = parseInt(n);
operating[0] = n;
}else{
var n = operating[2]
n = operating[2].toString();
n += '8';
n = parseInt(n);
operating[2] = n;
};
};
};
function type9(){
resultline_str += " 9";
document.getElementById('result').innerHTML = resultline_str;
if(multidigit === 0){
operating.push(9);
multidigit = 1;
}else{
if(space === 0){
var n = operating[0]
n = operating[0].toString();
n += '9';
n = parseInt(n);
operating[0] = n;
}else{
var n = operating[2]
n = operating[2].toString();
n += '9';
n = parseInt(n);
operating[2] = n;
};
};
};
function type_plus(){
resultline_str += " +";
document.getElementById('result').innerHTML = resultline_str;
operating.push('+');
multidigit = 0;
place = 2;
};
function type_minus(){
resultline_str += " -";
document.getElementById('result').innerHTML = resultline_str;
operating.push('-');
multidigit = 0;
place = 2;
};
function equals(){
if(operating.length != 3){
document.getElementById('result').innerHTML = 'Error';
multidigit = 0;
place = 0;
return;
}else{
if(operating[1] === '+'){
resultline_str = resultline_str + '<br/>' + (parseInt(operating[0]) + parseInt(operating[2])) + '<br/>';
}else if(operating[1] === '-'){
resultline_str = resultline_str + '<br/>' + (parseInt(operating[0]) - parseInt(operating[2])) + '<br/>';
}else if(operating[1] === '*'){
resultline_str = resultline_str + '<br/>' + (parseInt(operating[0]) * parseInt(operating[2])) + '<br/>';
}else if(operating[1] === '/'){
resultline_str = resultline_str + '<br/>' + (parseInt(operating[0]) / parseInt(operating[2])) + '<br/>';
};
};
document.getElementById('result').innerHTML = resultline_str;
operating = [];
multidigit = 0;
place = 0;
};
function clear_line(){
resultline_str = " ";
document.getElementById('result').innerHTML = resultline_str;
operating = [];
multidigit = 0;
place = 0;
};
function times(){
resultline_str += " *";
document.getElementById('result').innerHTML = resultline_str;
operating.push('*');
multidigit = 0;
place = 2;
};
function divide(){
resultline_str += " /";
document.getElementById('result').innerHTML = resultline_str;
operating.push('-');
multidigit = 0;
place = 2;
};
body{
background-color:lightblue;
}
#head{
background-color:blue;
color:white;
padding:10px;
margin:10 auto;
text-align:center;
font-size:20px;
font-family:courier;
border:5px solid grey;
}
#grid{
height:510px;
width:260px;
background-color:blue;
color:white;
border-collapse:collapse;
border:10px solid black;
float:left;
margin-right:10px;
}
td{
padding:30px;
font-size:40px;
size:400%;
font-family:courier;
font-weight:bold;
}
#result{
float:right;
height:525px;
width:950px;
background-color:white;
border:2px solid black;
text-align:right;
font-size:45px;
font-family:courier;
font-weight:strong;
}
<div id="head">
<h1>Calculator<h1>
</div>
<div id="grid">
<!-- calculator buttons -->
<table>
<tr>
<td id="1" onclick='type1()'>1</td>
<td id="2" onclick='type2()'>2</td>
<td id="3" onclick='type3()'>3</td>
</tr>
<tr>
<td id="4" onclick='type4()'>4</td>
<td id="5" onclick='type5()'>5</td>
<td id="6" onclick='type6()'>6</td>
</tr>
<tr>
<td id="7" onclick='type7()'>7</td>
<td id="8" onclick='type8()'>8</td>
<td id="9" onclick='type9()'>9</td>
</tr>
<tr>
<td id="=" onclick='equals()'>=</td>
<td id="+" onclick='type_plus()'>+</td>
<td id="-" onclick='type_minus()'>-</td>
</tr>
<tr>
<td id="times" onclick='times()'>X</td>
<td id="clear" onclick='clear_line()'>C</td>
<td id="divide" onclick='divide()'>%</td>
</tr>
</table>
</div>
<div id="result">
<b></b>
</div>
【问题讨论】:
-
每次你看到你在你的代码中重复某些东西意味着你做错了什么。我指的是您的九个
typeX函数,它基本上是一个采用单个参数的函数。 -
首先,您每次都在重复相同的功能。我将创建一个名为 type(parameter) 的函数,因此当用户单击键 2 时,您将调用该函数,如下所示:type(2)。这同样适用于加号、减号、除号和时间。在全局范围、变量保护等方面存在很多错误。希望对您有所帮助。
-
您需要注意模式,然后创建您看到重复的功能。这就是您的代码太长的原因。其次,您应该考虑阅读调车场算法,这将帮助您解决第二个操作数和其他问题
-
那是什么样的缩进?
-
这个问题不适合codereview.stackexchange.com吗?
标签: javascript html css syntax calculator