- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Java,作为高中作业之外的个人项目,我决定制作一些数学求解程序来练习。
为了热身,我决定编写一个基本的计算器程序......并且它有效......有点。所以...请帮助我!
-> 拥有一个计算器,通过扫描仪输入,可以使用运算符 [+、-、/、^(Math.pow)、*] 计算任何数字序列。 (例如:1+2+4+2 等)
-> 它可以计算总和、乘积、幂、差以及除两个数(int 或 double,但答案是 double)。
-> 输入中不能包含任何空格,否则会在第一个数组(求和数组)上出现“越界”错误,依此类推
-> 它无法计算任何复合问题(例如:1+2+3、3*4^6 等)。
我计划为此添加许多其他内容(三角函数、额外的幂等),但目前,这需要工作。有人可以告诉我如何解决这些问题吗?
我应该注意的最大的编程错误(除了不起作用)是什么(基于您看到的代码)?我通常按顺序和逻辑进行编程,但我觉得我(和我的代码)可以更加高效。
import java.util.*;
import java.io.*;
import java.lang.System;
import java.util.stream.*;
public class basicCalculator {
public static void main(String args[])throws IOException{
System.out.println("What would you like to calculate?");
Scanner inputNum = new Scanner(System.in);
String inputI = inputNum.nextLine();
Scanner inputScan = new Scanner(inputI);
Scanner inputScan2 = inputScan.useDelimiter("\\+|\\-|\\/|\\*|\\^|\\s");
Scanner inputScan3 = new Scanner(inputI);
double textContent[] = new double[1000];
int loopCount = -1;
int loopCount2 = 1;
int loopCount3 = 0;
double[] partOfResult = new double[1000];
while(inputScan.hasNextDouble()){
loopCount++;
textContent[loopCount] = inputScan.nextDouble();
}
while(inputScan3.hasNext()){
if(inputI.contains("+")){
partOfResult[loopCount3] = (textContent[loopCount2 - 1] + textContent[loopCount2]);
loopCount3++;
loopCount2++;
}else if(inputI.contains("-")){
partOfResult[loopCount3] = (textContent[loopCount2 - 1] - textContent[loopCount2]);
loopCount3++;
loopCount2++;
}
else if(inputI.contains("/")){
partOfResult[loopCount3] = (textContent[loopCount2 - 1] / textContent[loopCount2]);
loopCount3++;
loopCount2++;
}
else if(inputI.contains("*")){
partOfResult[loopCount3] = (textContent[loopCount2 - 1] * textContent[loopCount2]);
loopCount3++;
loopCount2++;
}
else if(inputI.contains("^")){
partOfResult[loopCount3] = (Math.pow(textContent[loopCount - 1], textContent[loopCount]));
loopCount3++;
loopCount2++;
}
if(inputScan.hasNext() == false){
double[] answer = new double[1000];
for(int i = 0; i <= loopCount3;){
answer[i] = partOfResult[i] + partOfResult[i+1];
i++;
}
double sum = DoubleStream.of(answer).sum();
System.out.println("The answer is " + sum);
break;
}
}
inputScan3.close();
inputScan2.close();
inputScan.close();
inputNum.close();
}
}
谢谢!
最佳答案
导入java.lang.System;
这是不必要的。 java.lang
是在您没有说明的情况下导入的,因此您可以在代码中编写 System
而无需此行。您可以安全地将其删除。
扫描仪 inputScan2 = inputScan.useDelimiter("\\+|\\-|\\/|\\*|\\^|\\s");
仅仅因为 useDelimiter
返回一个 Scanner
并不意味着您需要将其放入变量中。除了关闭它之外,您再也不会使用 inputScan2
(并且在任何情况下,inputScan2
都等于此行之后的 inputScan
,使其变得多余。)所以我会将行缩短为:
inputScan.useDelimiter("\\+|\\-|\\/|\\*|\\^|\\s");
并删除关闭此未使用的扫描仪的相应行。
将 loopCount2
和 loopCount3
作为单独的变量,因为它们总是彼此相距一远,这有点奇怪。看起来你可以摆脱其中一个。
我注意到除了 main 方法之外,你没有任何方法。对于相对较小的程序来说,这并不是那么糟糕,但最好养成将代码拆分为方法的习惯。
我注意到您没有任何代码注释。注释通常可以帮助您(和其他人)理解您的代码。特别是当变量被命名为诸如 inputScan3
之类的东西时 - 该名称给出了变量的一般概念,但它并没有真正说明为什么它与 inputScan
不同,例如。评论会对此有所帮助。
像 if(inputI.contains("+")){
这样的行对于复合语句来说永远不会有多大好处 - 你要检查整个字符串是否包含 +
,如果您正在处理 4+2*3
,这并不是那么相关,因为这并不能告诉您当前正在执行加法还是乘法。如果您想处理复合语句,您几乎必须重新检查正在执行的操作的方式。
我注意到您将 answer
数组的大小设置为 1000。这对于其他数组来说也许是可以理解的,因为您在创建它们时不知道它们的大小,但对于这个数组,您已经知道大小 - 它是loopCount3 + 1
。因此,您可以编写 double[] answer = new double[loopCount3+1];
并节省一些内存。
关于java - (Noob Coder)基本计算器问题 + 代码建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42311961/
我是一个相对较新的程序员; CS 学士学位,大学毕业大约 2 年,主要使用 C# 中的 .NET。我对 SQL 交互/脚本编写相当流利,并且对 ASP.NET 做了一些工作(主要是维护现有站点)。 我
我计划开发一个简单的解决方案,使我能够即时执行非常基本的视频流分析。我以前从未做过类似的事情,因此这是一个非常笼统和开放的问题。主要重点是检查流是否正常运行,例如 - 卡住帧、黑屏以及音频是否存在。同
我正在考虑重组一个大型 Maven 项目...... 我们当前结构的基本概述: build [MVN plugins, third party dependency management]:5.1
我需要有关附加查询的建议。该查询执行了一个多小时,并根据解释计划进行了全表扫描。我对查询调优还很陌生,希望得到一些建议。 首先,为什么我要进行全表扫描,即使我使用的所有列都在其上创建了索引。 其次,有
我正在做一个项目,我需要在 4 个模型之间创建三个多对多关系。这是它的过程: 常见问题类别可以有许多常见问题子类别,反之亦然。 常见问题组可以有许多常见问题的子类别,反之亦然。 常见问题可以有许多常见
对于代码大小比语音质量更重要的 PIC 和/或 ARM 嵌入式系统,是否有任何易于使用的免费或廉价的语音合成库?现在似乎 1 meg 的封装被认为是“紧凑的”,但很多微 Controller 都比它小
我们正在使用 Solr 建议器功能进行 businessName 查找。当用户输入查询以及匹配的名称时,我们希望 solr 发送来自个人资料的其他属性,如 id、地址、城市、州、国家等字段。 我尝试使
我正在构建一个用户界面。我的计划将包括 4 个主要部分: 1) 顶部菜单 - TMainMenu。一个窗口的顶部 2) 主菜单 - TTreeView。一个窗口的左边。 TreeView的每一项=对应
我的公司需要一个任务管理系统来处理从“为X购买一台计算机”到“将一个人转移到另一个国家”这样简单的场景。简单的场景是由一个人处理的单个任务,而更大的任务可以分解为在工作流程中委派给多个人的多个子任务。
MarkLogic 服务器的林大小与实际内存的建议比率是多少?例如,我目前有一个 190GB 的数据库,并且该数据库随着时间的推移而不断增长。由于数据库会不断增长,我最终需要对该数据库进行集群。因此,
去年我收到了一个礼物,它是一个索尼 CMT700Ni 音频站,支持 wifi。它还具有类似于广播的功能,称为“PartyStreaming”。我目前正在挖掘内部,探索它,所以也许我可以结束拥有自己的“
有没有我可以阅读的研究论文/书籍可以告诉我针对手头的问题哪种特征选择算法最有效。 我试图简单地将 Twitter 消息识别为 pos/neg(首先)。我从基于频率的特征选择开始(从 NLTK 书开始)
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我正在浏览 stackoverflow 以查找有关使用 jUnit 进行测试的常见建议,但仍然有几个问题。我知道,如果要测试的方法很复杂,最好的方法是将其分成小的单独部分并测试每个部分。但问题是 -
我有一个方法如下 public List> categorize(List customClass){ List> returnValue = new ArrayList<>();
我的问题是,当按照下面的程序合并时,在最佳实践场景中,“将分支折叠回主干”程序的最后一步是正确的方法吗? 我已经使用 svn 很多年了。在我的个人项目中,我总是毫不犹豫地在主干上愉快地进行修改,并且在
我读过 UINavigationController当您想从 n 个屏幕跳转到第一个屏幕时,这是最佳选择。这样做需要以下代码: NSMutableArray *array=[[NSMutableArr
我有一个文件输入类。它在构造函数中有一个字符串参数来加载提供的文件名。但是,如果文件不存在,它就会退出。如果文件不存在,我希望它输出一条消息 - 但不确定如何...... 这是类(class): pu
我希望创建一个“您访问过的国家/地区” map - 就像您可能在 Facebook、TravelAdvisor 和诸如此类的网站上看到的那样。 我尝试过不同的闪光灯套件,但它们并不像我希望的那样先进。
我需要一些关于如何处理我想用 Perl 编写的脚本的建议。基本上我有一个看起来像这样的文件: id: 1 Relationship: "" name: shelby pet: 1
我是一名优秀的程序员,十分优秀!