import java.io.File;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Question {
public static void menu() {
System.out.println("\nEnter your choice :\n");
System.out.println("1 - Load Hotels and Reservations from file");
System.out.println("\nEnter \"1\"");
int choice = 1;
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(System.in));
choice = Integer.parseInt(br.readLine());
} catch (IOException ioe) {
ioe.printStackTrace();
}
if (choice == 1)
loadOption();
}
public static void loadOption() {
Scanner scan;
ArrayList<Hotel> hotel = new ArrayList();
try {
Hotel hotel = new Hotel();
scan = new Scanner(new File("data1.csv"));
scan.useDelimiter(";");
int column = 1;
while (scan.hasNext()) {
scan.next();
if (column == 1)
hotel.id = scan.next();
if (column == 2)
hotel.name = scan.next();
if (column == 3)
hotel.star = scan.next();
if (column == 4)
hotel.rooms = scan.next();
}
System.out.print("Files Succesfully Loaded!!!\n");
scan.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Question obj = new Question();
obj.menu();
}
};
public class Hotel extends Question {
String id, star, rooms, name;
public Hotel() {
} // constructor
};
我是这样编译它们的:
javac Hotel.java
javac Question.java
java Question
确切的错误是这样的:
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:862)
at java.util.Scanner.next(Scanner.java:1371)
at Question.loadOption(Question.java:43)
at Question.menu(Question.java:27)
at Question.main(Question.java:62)
您检查hasnext()
,但随后调用next()
两次。所以第二个调用是未检查的。更糟糕的是,第一个电话不需要,也没有效果。也不增加列
变量。
试试这个:
Hotel hotel = new Hotel();
scan = new Scanner(new File("data1.csv"));
scan.useDelimiter(";");
int column=1;
while (scan.hasNext()) {
//scan.next(); this is not needed
if (column == 1)
hotel.id = scan.next();
if (column == 2)
hotel.name = scan.next();
if (column == 3)
hotel.star = scan.next();
if (column == 4)
hotel.rooms = scan.next();
//this is needed as well:
column++;
}
System.out.print("Files Succesfully Loaded!!!\n");
scan.close();
注意:您仍然只创建Hotel的一个实例。
我在这里做错了什么?
我对java有点陌生,习惯于用Python编写代码。因此,当涉及到获取用户输入时,我总是对执行这样的任务需要多少行代码感到恼火。所以我尝试创建自己的类来简化这个过程。我想表演这样的节目: 控制台内部: 以下是迄今为止的代码: 当我使用该类一次时,一切正常,但当我再次尝试使用它时,我会遇到一个异常: 输出: 我真的不知道为什么总是这样。请帮帮我,谢谢。
因此,在调用一个我将在下面发布的函数(在main中)后,在同一个main中创建一个新的扫描器对象不起作用,并给了我以下错误: 它就放在我调用函数之后(在上面的代码中,我会关闭扫描器)。当我注释掉调用函数时,这个扫描器工作了,所以函数中的一些东西导致了扫描器中的错误。我花了几个小时寻找,但无法解决它,如果有人可以,我会非常感激。函数: (当我测试它时,我总是输入2)我尝试删除do-while循环,但
我有一个Rails应用程序,通过制造过程跟踪我们的产品。我想有一个条形码扫描器在每个工作站和有员工扫描条形码为一个项目时,他已完成的工作为该项目。 有没有可能识别出10台条形码扫描仪中使用了哪一台? 我知道一些扫描仪能够在扫描的条形码之前输入前缀,所以我可以解析该前缀来识别所使用的扫描仪。我希望有另一种解决办法。
此外,我希望程序自动检查和忽略,如果用户输入一个字符,而不是一个数字。因为现在,当用户输入而不是数字时,程序就会退出。
但是在输入序列之后,我们必须键入一个非整数字符并按“Enter”来终止扫描程序并执行“for”循环。有没有什么方法我们不必键入一个非整数字符来终止扫描仪?