【发布时间】:2017-09-08 08:53:05
【问题描述】:
我创建了一个 Java 购物车应用程序。我已经为此使用了 InputStreamReader 类。但它表现出奇怪的行为。我已经尝试过 Scanner 类和 Data Input Stream 类。但他们似乎不适合这个应用程序。
谁能指出这门课有什么问题?
同样如前所述,Scanner 类和 DIS 类倾向于跳过用户输入,与使用 ISR 类时相同(请参阅输出:速率)。我厌倦了尝试每个 Java 用户输入实用程序类,并一次又一次地修改我的代码。
import java.util.ArrayList;
//import java.util.InputMismatchException;
import java.util.Iterator;
import java.util.Scanner;
import java.io.DataInputStream;
import java.io.InputStreamReader;
import java.io.IOException;
import java.lang.Throwable;
public class NewShop {
protected ArrayList<NewItem> ItemList;
ArrayList<NewItem> cartList ;
// public DataInputStream dis = new DataInputStream(System.in);
// private Scanner sc = new Scanner(System.in);
private InputStreamReader isr = new InputStreamReader(System.in);
public void addItem() {
long aCode = 0;
String aName ="";
double aRate = 0;
int aQuantity = 0;
NewItem foundItem;
System.out.println("Enter Item code:");
/* try{
String adddisString = dis.readLine();}
catch(IOException e){e.printStackTrace();} */
try{
aCode = isr.read();
System.out.println("code entered is : " + aCode);
}
catch(IOException e){e.printStackTrace();}
foundItem = search(aCode);
if (foundItem == null) {
System.out.println("Item name : ");
try{
aName = dis.readLine();
}
catch(IOException e){e.printStackTrace();}
System.out.println("Rate : ");
try{ aRate = isr.read(); }
catch(IOException e){e.printStackTrace();}
System.out.println("Quantity : ");
try{aQuantity = isr.read();}
catch(IOException e){e.printStackTrace();}
NewItem aItem = new NewItem(aName, aRate, aCode, aQuantity);
ItemList.add(aItem);
}
else {
System.out.println("Item exists");
}
}
}
输出:
shachindratripathi@saurabh-OptiPlex-3010:~/NewJava$ java NewShoppingCart
New Shop for Items created.
-----ITEM------
1. Display all items
2. Search items
3. Add items to list
4. Add items to cart
5. Issue item
6. Exit
Choice:
3
Enter Item code:
1
code entered is : 49
Item name :
apple
Rate :
Quantity :
30
1. Display all items
2. Search items
3. Add items to list
4. Add items to cart
5. Issue item
6. Exit
Choice:
1
code name rate quantity
49 apple 10.0 51
************
1. Display all items
2. Search items
3. Add items to list
4. Add items to cart
5. Issue item
6. Exit
Choice:
【问题讨论】:
-
你的预期输出是什么?
-
您能否尝试进一步缩进您的代码并提供minimal reproducible example? (有一些数据)
-
参见“输出”部分。我认为预期的输出肯定是显而易见的。
-
好吧,我看到
Enter Item code:1 code entered is : 49不是你想要的......但你看到它在哪里了吗?您正在使用read()读取每个字节的流字节,您将获得char值,1 = 49 看到ASCII table -
你想达到什么目的?
isr.read()以整数形式返回 inupt 的下一个字符,您将其放入long变量中。第一个输入的字符是1,所以变量得到了它的代码49...
标签: java java.util.scanner datainputstream inputstreamreader