JAVA 编写时关于SCANNER的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 编写时关于SCANNER的问题相关的知识,希望对你有一定的参考价值。
import java.util.Scanner;
public class gameDriver
public static Scanner scan = new Scanner(System.in);
public static Group g[] = new Group[2];
private static int menuChoice;
private static int groupChoice;
public gameDriver()
menuChoice = -1;
groupChoice = -1;
public static void menu()
System.out.print("<-- System Menu -->\n1. Add teams to group\n2. Input match result\n3. Display group ladders\n4. Display final standings\n5. Quit\n\nWhat do you want to do?: ");
menuChoice = scan.nextInt();
if(menuChoice==1)
setGroup();
else if(menuChoice==2)
else if(menuChoice==3)
else if(menuChoice==4)
else if(menuChoice==5)
else
public static void setGroup()
String teamName = new String();
String teamLocation = new String();
System.out.print("\nDo you want to add the teams to group 1 or 2: ");
groupChoice = scan.nextInt();
g[groupChoice-1]= new Group(groupChoice);
for(int i = 0; i<=3;i++)
System.out.print("\n\nAdding a team.\nWhat is the name of the team: ");
teamName = scan.nextLine();
System.out.print("\nWhere is the team from: ");
teamLocation = scan.nextLine();
g[groupChoice].t[i]= new Team(teamLocation,teamName);
System.out.print("\n\nGroup "+groupChoice+" is now full.");
public static void main(String[] args)
menu();
这一段程序我没写完,另外还有一个TEAM CLASS和一个GROUP CLASS可正常运行,问题是这段程序在运行到
for(int i = 0; i<=3;i++)
System.out.print("\n\nAdding a team.\nWhat is the name of the team: ");
teamName = scan.nextLine();
System.out.print("\nWhere is the team from: ");
teamLocation = scan.nextLine();
g[groupChoice].t[i]= new Team(teamLocation,teamName);
这段的时候What is the name of the team:
和Where is the team from:会紧接着出现,而不是等SCAN完了一个NAME滞后再SCAN LOCATION,然后就会出现RUNTIME ERROR应该是因为尝试把一个数值SCAN到两个变量里去……
请问为什么会这样……
yicaifenchen 写的运行是可以运行了,问题是我在那两个连着的SCAN那里必须要用到NEXTLINE而不是NEXT,因为输入中间要允许用空格之类的,我要扫描的是一整行……
String teamName = new String();
String teamLocation = new String();
这是什么? 不是数组 也不是list 也不是变量
(我是菜鸟) 参考技术B import java.security.acl.Group;
import java.util.Scanner;
public class gameDriver
public static Scanner scan = new Scanner(System.in);
public static Group g[] = new Group[2];
private static int menuChoice;
private static int groupChoice;
public gameDriver()
menuChoice = -1;
groupChoice = -1;
public static void menu()
System.out.print("<-- System Menu -->\n1. Add teams to group\n2. Input match result\n3. Display group ladders\n4. Display final standings\n5. Quit\n\nWhat do you want to do?: ");
menuChoice = scan.nextInt();
if(menuChoice==1)
setGroup();
else if(menuChoice==2)
else if(menuChoice==3)
else if(menuChoice==4)
else if(menuChoice==5)
else
public static void setGroup()
String teamName = new String();
String teamLocation = new String();
System.out.print("\nDo you want to add the teams to group 1 or 2: ");
groupChoice = scan.nextInt(); ///scan use good
//g[groupChoice-1]= new Group(groupChoice);
for(int i = 0; i<=3;i++)
System.out.print("\n\nAdding a team.\nWhat is the name of the team: ");
//teamName = scan.nextLine();
teamName = scan.next();
System.out.print("\nWhere is the team from: ");
//teamLocation = scan.nextLine();
teamLocation = scan.next();
//g[groupChoice].t[i]= new Team(teamLocation,teamName);
System.out.print("\n\nGroup "+groupChoice+" is now full.");
public static void main(String[] args)
menu();
本回答被提问者采纳
Java 代码在 Scanner hasNextLine 处挂起
【中文标题】Java 代码在 Scanner hasNextLine 处挂起【英文标题】:Java code hangs at Scanner hasNextLine 【发布时间】:2015-07-24 18:52:02 【问题描述】:首先,我是 Java 新手,正在尝试完成学校关于创建自动售货机的作业。我的程序接收 2 个文件作为 cli 参数,一个用于产品,另一个用于金钱。
对于我的一生,我无法弄清楚为什么代码挂在第 42 行
(while (moneyTemp.hasNextLine());)
我尝试使用断点在 Eclipse 上进行调试,并注意到代码从未超过这一行。在while循环中放置一个打印语句,我没有得到输出,所以我知道它没有循环。
java 文档说 hasNextLine 可以阻止等待用户输入,但由于我的源是一个文件,我不确定为什么会这样。请参阅下面的相关代码。
import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;
public class VendingMachine
static Scanner input = new Scanner (System.in);
public static void main(String[] args)
try
Scanner productTempFile = new Scanner(new File(args[0]));
Scanner moneyTemp = new Scanner(new File(args[1]));
int numProducts = 0; //Number of products to be loaded to the machines
int numMoney = 0; //Number of money objects to be loaded in the machine
while (productTempFile.hasNextLine()) //This block will get the number of products
numProducts++;
productTempFile.nextLine();
productTempFile.close();
Product[] invArray = new Product[numProducts];
Scanner myFile = new Scanner(new File(args[0]));
for(int i = 0; i < numProducts; i++) //This block populates the array of products
String inputLine = myFile.nextLine();
String[] lineArray = inputLine.split(",");
invArray[i] = new Product(lineArray[0], Double.valueOf(lineArray[1]), lineArray[2], lineArray[3],
Double.valueOf(lineArray[4]), Integer.valueOf(lineArray[5]));
myFile.close();
System.out.println("I'm here");
while (moneyTemp.hasNextLine()); //This block gets the number of different money items
numMoney++;
moneyTemp.nextLine();
下面是我提供的第二个文件,即 arg[1],其格式与第一个文件相同。
PaperCurrency,100 Dollar Bill,100.0,medium,paper,0 PaperCurrency,50 Dollar Bill,50.0,medium,paper,0 PaperCurrency,20 Dollar Bill,20.0,medium,paper,0 PaperCurrency,10 Dollar Bill,10.0,medium,paper,4 PaperCurrency,5 Dollar Bill,5.0,medium,paper,8 PaperCurrency,1 Dollar Bill,100.0,medium,paper,16 CoinCurrency,50 美分,0.5,大,金属,10 CoinCurrency,Quarter,0.25,medium,metal,20 CoinCurrency,Dime,0.1,small,metal,30 CoinCurrency,Nickel,0.05,small,metal,40 CoinCurrency,Penny,0.01,small,metal,50任何帮助将不胜感激。 谢谢
【问题讨论】:
【参考方案1】:从行中删除分号
while (moneyTemp.hasNextLine());
分号使while循环完成其主体而不做任何事情意味着它就像while()
当while条件为真时什么都不做,因为你的条件是hasNextLine()
它一次又一次地检查同一行导致无限循环。
【讨论】:
啊,老分号在一段时间的末尾...我以前对此感到沮丧。 感谢您的快速回复。我不敢相信它这么小 :) 我在想它会是这么先进的东西。谢谢一百万。【参考方案2】:通过添加分号 (;
),您隐含地让 while
循环执行一个空块。 hasNextLine()
不会改变扫描器所基于的InputStream
,所以由于while
循环的主体中没有任何内容,因此没有任何东西可以改变状态,并且循环将永远继续。
只需从while
循环中删除分号,就可以了:
while (moneyTemp.hasNextLine()) // no ; here!
numMoney++;
moneyTemp.nextLine();
【讨论】:
这个答案与另一个答案有何不同?以上是关于JAVA 编写时关于SCANNER的问题的主要内容,如果未能解决你的问题,请参考以下文章