- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一项学校作业。我得到了这个文本文件,我需要从中读取值,如下所示T = 门票销售
,D = donations
,E = expenses
,文本文件将其列为;
T 2000.00
E 111.11
D 500.00
E 22.22
我想从文本文件中获取数据,添加类似的值,询问用户是否希望添加其他数据,然后显示计算输出。
import java.io.*;
import java.util.Scanner;
public class MyEventManager {
public static String amountType;
public static int amount;
public static String validationMethodType () throws IOException
{
Scanner keyboard = new Scanner ( System.in );
System.out.printf("\nPlease enter an amount type ('T' - Tickets), ('D' - Donations), ('E' - Expenses): ");
amountType = keyboard.next().toUpperCase();
char choice = amountType.charAt(0);
//choice = Character.toUpperCase(choice);
if (choice != 'T' && choice != 'D' && choice != 'E')
{
do
{
System.out.printf("\nInvlaid amount entered...");
System.out.printf("\nPlease enter an amount type ('T' - Tickets), ('D' - Donations), ('E' - Expenses): ");
amountType = keyboard.next().toUpperCase();
choice = amountType.charAt(0);
//choice = Character.toUpperCase(choice);
}
while(choice != 'T' && choice != 'D' && choice != 'E');
return amountType;
}
else
{
return amountType;
}
}
public static int validationMethodAmount()
{
Scanner keyboard = new Scanner ( System.in );
System.out.printf("\nPlease enter an amount (amount must be positive and non-zero): ");
amount = keyboard.nextInt();
if (amount <= 0)
{
do
{
System.out.printf("\nInvlaid amount entered...");
System.out.printf("\nPlease enter an amount (amount must be positive and non-zero): ");
amount = keyboard.nextInt();
}
while (amount <= 0);
return amount;
}
else
{
return amount;
}
}
public static void main(String [] args) throws IOException
{
Scanner keyboard = new Scanner ( System.in );
System.out.printf("This program will read a text file and add data to it, then compute the results.\n\n"); // display purpose
MyEventClass myEvent = new MyEventClass(); //create object
//
String readFile = "Event.txt"; //file location constant
try
{
File inputFile = new File (readFile); //open the file
InputStream is;
Scanner scanFile = new Scanner (inputFile); //scan the file
{
is = new BufferedInputStream(new FileInputStream(inputFile));
//
try
{
while(scanFile.hasNext())
{
if ( scanFile.hasNextLine())
{
myEvent.instanceMethod(amountType, amount);
}
}
}
catch (IllegalArgumentException o)
{
System.out.println("Error code 3: No data found!" );
}
}
byte[] c = new byte[1024];
int count = 1;
int readChars;
while ((readChars = is.read(c)) != -1)
{
for (int i = 0; i < readChars; ++i)
{
if (c[i] == '\n')
{
++count;
}
}
}
System.out.println("Total number of valid lines read was " + count);
}
catch (FileNotFoundException e)
{
System.out.println("Error code 4: The file " + readFile + " was not found!" );
}
System.out.println("Are there any more amounts to add that where not in the text file? ");
String questionOne = keyboard.next();
if ("y".equalsIgnoreCase(questionOne))
{
validationMethodType();
validationMethodAmount();
myEvent.instanceMethod(amountType, amount);
}
myEvent.displayResults();
}
}
第二类
public class MyEventClass {
private double ticketSales;
private double moneyDonated;
private double moneySpent;
public MyEventClass ()
{
this.ticketSales = 0.0;
this.moneyDonated = 0.0;
this.moneySpent = 0.0;
}
public double getTicketSales ()
{
return ticketSales;
}
public double getMoneyDonated ()
{
return moneyDonated;
}
public double getMoneySpent ()
{
return moneySpent;
}
public double instanceMethod (String amountType, double amount)
{
char choice = amountType.charAt(0);
if(amount <= 0)
{
throw new IllegalArgumentException("Error code 1: Amount should be larger then 0");
}
if(choice != 'T' && choice != 'D' && choice != 'E')
{
//increment the current total for the amount type specified by the first parameter by the amount in the second paramter?
return amount++;
}
else
{
throw new IllegalArgumentException("Error code 2: Invalid input, data will be ignored");
}
}
public void displayResults()
{
double income = this.ticketSales + this.moneyDonated;
double profits = income - this.moneySpent;
System.out.printf("\nTotal Ticket Sales: " + "%8.2f", this.ticketSales);
System.out.printf("\nTotal Donations: " + "%11.2f" + " +", this.moneyDonated);
System.out.printf("\n --------");
System.out.printf("\nTotal Income: " + "%14.2f", income);
System.out.printf("\nTotal Expenses: " + "%12.2f" + " -", this.moneySpent);
System.out.printf("\n --------");
System.out.printf("\nEvent Profits: " + "%13.2f", profits);
System.out.println();
}
}
我认为我的问题之一是 instanceMethod 返回应该在此处添加值的位置。
当前输出;
run:
This program will read a text file and add data to it, then compute the results.
Exception in thread "main" java.lang.NullPointerException
at MyEventClass.instanceMethod(MyEventClass.java:34)
at MyEventManager.main(MyEventManager.java:90)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)
最佳答案
添加到 pczeus 的答案中,您还需要设置金额。改变
amountType = scanFile.nextLine();
到
String[] temp = scanFile.nextLine().split(" ");
amountType = temp[0];
amount = new Double(temp[1]);
应该解决这个问题。之后的下一个错误是在您的类(class)中,似乎选择选项被颠倒了。
if (choice == 'T' || choice == 'D' || choice == 'E') {
//increment the current total for the amount type specified by the first parameter by the amount in the second paramter?
return amount++;
} else {
throw new IllegalArgumentException("Error code 2: Invalid input, data will be ignored");
}
应该是
if (choice != 'T' && choice != 'D' && choice != 'E') {
throw new IllegalArgumentException("Error code 2: Invalid input, data will be ignored");
} else {
//increment the current total for the amount type specified by the first parameter by the amount in the second paramter?
return amount++;
}
你的最后一个类会是这样的
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class MyEventManager {
private Map<String, Double> amountMap = new HashMap<>();
public String amountType;
public double amount;
public static void main(String[] args) throws IOException {
MyEventManager eventManager = new MyEventManager();
eventManager.runEvent();
}
private void runEvent() throws IOException {
System.out.printf("This program will read a text file and add data to it, then compute the results.\n\n");
File inputFile = new File("Event.txt");
handleFileInput(inputFile);
System.out.println("Are there any more amounts to add that where not in the text file?\n");
Scanner keyboard = new Scanner(System.in);
String questionOne = keyboard.next();
if ("y".equalsIgnoreCase(questionOne)) {
do {
validationMethodType();
validationMethodAmount();
addAmount(amountType, amount);
System.out.println("Are there any more amounts to add that where not in the text file?\n");
keyboard = new Scanner(System.in);
questionOne = keyboard.next();
} while (questionOne.equalsIgnoreCase("y"));
}
displayResults();
}
private void handleFileInput(File inputFile) throws IOException {
try (Scanner scanFile = new Scanner(inputFile)) {
int lineCount = 0;
while (scanFile.hasNext()) {
if (scanFile.hasNextLine()) {
String[] temp = scanFile.nextLine().split(" ");
String amountType = temp[0];
double amount = new Double(temp[1]);
try {
checkType(amountType);
checkAmount(amount);
} catch (IllegalArgumentException e) {
e.printStackTrace();
continue;
}
addAmount(amountType, amount);
lineCount++;
}
}
System.out.println("Total number of valid lines read was " + lineCount);
} catch (FileNotFoundException e) {
System.out.println("Error code 4: The file " + inputFile.getName() + " was not found!");
}
}
private String validationMethodType() throws IOException {
Scanner keyboard = new Scanner(System.in);
System.out.printf("\nPlease enter an amount type ('T' - Tickets), ('D' - Donations), ('E' - Expenses): ");
amountType = keyboard.next().toUpperCase();
if (amountTypeValid(amountType)) {
do {
System.out.printf("\nInvlaid amount entered...");
System.out.printf("\nPlease enter an amount type ('T' - Tickets), ('D' - Donations), ('E' - Expenses): ");
amountType = keyboard.next().toUpperCase();
}
while (amountTypeValid(amountType));
}
return amountType;
}
private double validationMethodAmount() {
Scanner keyboard = new Scanner(System.in);
System.out.printf("\nPlease enter an amount (amount must be positive and non-zero): ");
amount = keyboard.nextInt();
if (amount <= 0) {
do {
System.out.printf("\nInvlaid amount entered...");
System.out.printf("\nPlease enter an amount (amount must be positive and non-zero): ");
amount = keyboard.nextInt();
}
while (amount <= 0);
}
return amount;
}
private void checkAmount(double amount) {
if (amount <= 0) {
throw new IllegalArgumentException("Error code 1: Amount should be larger then 0");
}
}
private void checkType(String type) {
if (amountTypeValid(type)) {
throw new IllegalArgumentException("Error code 2: Invalid input, data will be ignored");
}
}
private void addAmount(String amountType, double amount) {
if (amountMap.containsKey(amountType)) {
double currentAmount = amountMap.get(amountType);
amountMap.put(amountType, currentAmount + amount);
} else {
amountMap.put(amountType, amount);
}
}
private boolean amountTypeValid(String type) {
return !type.equalsIgnoreCase("T") && !type.equalsIgnoreCase("D") && !type.equalsIgnoreCase("E");
}
private void displayResults() {
double ticket = amountMap.containsKey("T") ? amountMap.get("T") : 0;
double donated = amountMap.containsKey("D") ? amountMap.get("D") : 0;
double spent = amountMap.containsKey("E") ? amountMap.get("E") : 0;
double income = ticket + donated;
double profits = income - spent;
System.out.printf("\nTotal Ticket Sales: " + "%8.2f", ticket);
System.out.printf("\nTotal Donations: " + "%11.2f" + " +", donated);
System.out.printf("\n --------");
System.out.printf("\nTotal Income: " + "%14.2f", income);
System.out.printf("\nTotal Expenses: " + "%12.2f" + " -", spent);
System.out.printf("\n --------");
System.out.printf("\nEvent Profits: " + "%13.2f", profits);
System.out.println();
}
}
关于java - 从带有数字的文本文件中读取字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35544613/
我想使用 li 和 ul 制作一个多级下拉列表,以便显示我博客中按年和月排序的所有文章。我希望我的下拉菜单看起来像 Google Blogspot 下拉菜单: 这是我的 CSS 和 HTML 代码 u
我在 Win 7 64 机器上将 CodeBlocks 与 gcc 4.7.2 和 gmp 5.0.5 结合使用。开始使用 gmpxx 后,我看到一个奇怪的段错误,它不会出现在 +、- 等运算符中,但
我正在使用 tern 为使用 CodeMirror 运行的窗口提供一些增强的智能感知,它工作正常,但我遇到了一个问题,我想添加一些自定义“types”,可以这么说,这样下拉列表中它们旁边就有图标了。我
我正在尝试让我的 PC 成为 Android 2.3.4 设备的 USB 主机,以便能够在不需要实际“附件”的情况下开发 API。为此,我需要将 PC 设置为 USB 主机和“设备”(在我的例子中是运
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 9
我在设置服务器方面几乎是个新手,但遇到了一个问题。我有一个 Ubuntu 16.04 VPS 并安装了 Apache2 和 Tomcat7。我正在为 SSL 使用 LetsEncrypt 和 Cert
我在一个基于谷歌地图的项目上工作了超过 6 个月。我使用的是 Google Maps API V1 及其开发人员 API key 。当我尝试发布应用程序时,我了解到 Google API V1 已被弃
我是 Python 的新手,所以如果我对一些简单的事情感到困惑,请原谅。 我有一个这样的对象: class myObject(object): def __init__(self):
这个问题已经有答案了: How can I access object properties containing special characters? (2 个回答) 已关闭 9 年前。 我正在尝
我有下面的 CSS。我想要的是一种流体/液体(因为缺乏正确的术语)css。我正在为移动设备开发,当我改变模式时 从纵向 View 到陆地 View ,我希望它流畅。现在的图像 在陆地 View 中效
我正在尝试使用可以接受参数的缓存属性装饰器。 我查看了这个实现:http://www.daniweb.com/software-development/python/code/217241/a-cac
这个问题在这里已经有了答案: Understanding slicing (36 个答案) 关闭 6 年前。 以a = [1,2,3,4,5]为例。根据我的直觉,我认为 a[::-1] 与 a[0:
mysqldump -t -u root -p mytestdb mytable --where=datetime LIKE '2014-09%' 这就是我正在做的事情,它会返回: mysqldum
我正在制作销售税计算器,除了总支付金额部分外,其他一切都正常。在我的程序中,我希望能够输入一个数字并获得该项目的税额我还希望能够获得支付的总金额,包括交易中的税金。到目前为止,我编写的代码完成了所有这
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我是否必须进行任何额外的设置才能让 apache-airflow 在任务失败时向我发送电子邮件。我的配置文件中有以下内容(与默认值保持不变): [email] email_backend = airf
这个问题在这里已经有了答案: What does the $ symbol do in VBA? (5 个回答) 3年前关闭。 使用返回字符串(如 Left)的内置函数有什么区别吗?或使用与 $ 相同
我有一个用VB6编写的应用程序,我需要使用一个用.NET编写的库。有什么方法可以在我的应用程序上使用该库吗? 谢谢 最佳答案 这取决于。您可以控制.NET库吗? 如果是这样,则可以修改您的库,以便可以
当我创建一个以 ^ 开头的类方法时,我尝试调用它,它给了我一个错误。 class C { method ^test () { "Hi" } } dd C.new.test; Too m
我已经使用 bower 安装了 angularjs 和 materialjs。 凉亭安装 Angular Material 并将“ngMaterial”注入(inject)我的应用程序,但出现此错误。
我是一名优秀的程序员,十分优秀!