“线程中的异常”;“主要”;java.util.NoSuchElementException:在java.util.Scanne中找不到任何行
为学校期末项目制作此程序。我尝试运行时出错,不确定需要做什么来修复它。 错误是:“线程中的异常”;“主要”;java.util.NoSuchElementException:在java.util.Scanne中找不到任何行,java,methods,Java,Methods,为学校期末项目制作此程序。我尝试运行时出错,不确定需要做什么来修复它。 错误是: Exception in thread "main" java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Scanner.java:1585) at BusinessCardMaker.getName(BusinessCardMaker.java:41) at BusinessCardMaker.instr
Exception in thread "main" java.util.NoSuchElementException: No line found
at java.util.Scanner.nextLine(Scanner.java:1585)
at BusinessCardMaker.getName(BusinessCardMaker.java:41)
at BusinessCardMaker.instructions(BusinessCardMaker.java:28)
at BusinessCardMaker.main(BusinessCardMaker.java:131)
我做错了什么。我可以做些什么来改进程序?我的代码有什么问题导致了这些错误
提前感谢大家
import java.util.Scanner;
import java.io.*;
import java.util.Random;
public class BusinessCardMaker{
private static String wholeName;
private static String firstLineAddress;
private static String secondLineAddress;
private static String company;
private static String location;
private static String jobTitle;
private static int officePhoneNum;
private static String extNum;
private static int input;
private static String email;
private static int cellNum;
private static int cardNumber;
public static void instructions() throws IOException{
System.out.println("Welcome to your very own Business Card Maker");
System.out.println("\nTo access the program please type 1");
Scanner keyboard = new Scanner(System.in);
int startProgram = keyboard.nextInt();
keyboard.close();
if(startProgram == 1)
{
getName();
getAddress();
getDepartment();
getPhoneNums();
getEmail();
generateCardNum();
cardMaker();
}
}
public static void getName()
{
Scanner keyboard = new Scanner(System.in);
System.out.println("Please input your whole name in this format (First M. Last)");
wholeName = keyboard.nextLine();
keyboard.close();
}
public static void getAddress(){
Scanner keyboard = new Scanner(System.in);
System.out.println("What is the first line of your address?");
firstLineAddress = keyboard.nextLine();
System.out.println("What is the second line of your address?");
secondLineAddress = keyboard.nextLine();
keyboard.close();
}
public static void getDepartment(){
Scanner keyboard = new Scanner(System.in);
System.out.println("What company do you work for?");
company = keyboard.nextLine();
System.out.println("What particular location of company do you work for?");
location = keyboard.nextLine();
System.out.println("What is your primary position?");
jobTitle = keyboard.nextLine();
keyboard.close();
}
public static void getPhoneNums()
{
Scanner keyboard = new Scanner(System.in);
System.out.println("What is your cell phone number?");
cellNum = keyboard.nextInt();
System.out.println("What is your office phone number?");
officePhoneNum = keyboard.nextInt();
System.out.println("Do you have and office extention? If yes enter 1, if no enter 0");
input = keyboard.nextInt();
if (input == 1) {
Scanner keyboardExt = new Scanner(System.in);
System.out.println("What is your extention number?");
extNum = keyboardExt.nextLine();
keyboardExt.close();
} else {
extNum = "N/A";
}
keyboard.close();
}
public static void getEmail(){
Scanner keyboard = new Scanner(System.in);
System.out.println("What is your Email Address?");
email = keyboard.nextLine();
keyboard.close();
}
public static void generateCardNum(){
System.out.println("We automatically generated a random business card number");
Random random = new Random();
cardNumber = random.nextInt(1000) + 1;
}
public static void save() throws IOException {
String businessCard = "Business_Card.txt";
File myFile = new File (businessCard);
PrintWriter writer = new PrintWriter(myFile);
System.out.println("Your card has been saved to " + businessCard);
writer.println("\n\n Your Business Card");
writer.println("\n*****************************************************************************");
writer.println("Card Number:" + cardNumber);
writer.println("\n"+company);
writer.println("\n\n\n\n\n "+wholeName);
writer.println(" "+jobTitle);
writer.println("\n\n\n\n\n");
writer.println(location+" "+"Office:"+officePhoneNum+"Ext:"+extNum);
writer.println(firstLineAddress+" "+"Cell:"+cellNum);
writer.println(secondLineAddress+" "+"Email:"+email);
writer.close();
}
public static void checkForFile() throws IOException{
String businessCard = "Business_Card.txt";
File myFile = new File (businessCard);
if(!myFile.exists()){
myFile.createNewFile();
}
}
public static void cardMaker() throws IOException {
System.out.println("\n\n Your Business Card");
System.out.println("\n*****************************************************************************");
System.out.println("Card Number:" + cardNumber);
System.out.println("\n"+company);
System.out.println("\n\n\n\n\n "+wholeName);
System.out.println(" "+jobTitle);
System.out.println("\n\n\n\n\n");
System.out.println(location+" "+"Office:"+officePhoneNum+"Ext:"+extNum);
System.out.println(firstLineAddress+" "+"Cell:"+cellNum);
System.out.println(secondLineAddress+" "+"Email:"+email);
checkForFile();
save();
}
public static void main (String[]args) throws IOException{
instructions();
}
}
keyboard.hasNextLine()
在调用keyboard.nextLine()之前必须返回true
根据您真正想要实现的目标,您可能希望使用它,如:
if(keyboard.hasNextLine()) {
String line = keyboard.nextLine();
}
.hasNextLine()
正在被动地阻塞,等待行出现(新的行字符出现),所以下一个解决方案是环绕调用
keyboard.nextLine()
使用try/catch。您是否可以添加一条注释,显示错误发生的行号,这将是查找错误原因的地方。首先,您需要在通过nextLine()
获取之前调用hasNextLine()
,因为hasNextLine()
阻塞直到输入一行,这nextLine>()
消耗。其次,你不应该调用Scanner#close()
在扫描仪上
包装系统。在
中,因为它将关闭系统。在程序执行的剩余时间内
。@shotgunnija扫描仪#nextLine
也会阻塞线程,直到有一行可从系统读取。在
中,因此无需先调用hasNextLine
(如果您使用System.in
作为源流)。我认为没有必要关闭扫描仪,您可以添加一个实例变量Scanner-keyboard
,并将其打开一次。顺便问一下,为什么您的变量是static
?字符串行
,应该在if station;外部定义)这是正确的;您需要将其设置为if(keyboard.hasNextLine()){line=keyboard.nextLine();}
,或者while(keyboard.hasNextLine()){line=keyboard.nextLine();processLine(line);if(/*line OK*/)break;}
@OSryx可能会,也可能不会。谁知道呢?@zubergu是的,没错depends@ShotgunNinja这是正确的,首先检查是否有需要阅读的内容更清晰、更安全,但这并不是问题的解决方案,这就是我要说的:D.我还建议先调用has…
,但如果在
中,没有必要这样做:P。但这只是吹毛求疵。