为更多读者编辑:问题是我的输入文件已损坏.
我不明白我做错了什么:
我使用的是这段代码:
File f = new File("C:\\Temp\\dico.txt");
BufferedReader r = null;
try {
r = new BufferedReader(new FileReader(f));
String scan;
while((scan=r.readLine())!=null) {
if(scan.length()==0) {continue;}
//treatment
}
} catch (FileNotFoundException ex) {
Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if(r!=null) try {
r.close();
} catch (IOException ex) {
Logger.getLogger(Lexique.class.getName()).log(Level.SEVERE, null, ex);
}
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.现在,出于某种原因,我想换一台扫描仪.我的代码成了:
File f = new File("C:\\Temp\\dico.txt");
Scanner r = null;
try {
r = new Scanner(f);
String scan; …Run Code Online (Sandbox Code Playgroud) 我得到以下代码:
int nnames;
String names[];
System.out.print("How many names are you going to save: ");
Scanner in = new Scanner(System.in);
nnames = in.nextInt();
names = new String[nnames];
for (int i = 0; i < names.length; i++){
System.out.print("Type a name: ");
names[i] = in.nextLine();
}
Run Code Online (Sandbox Code Playgroud)
该代码的输出如下:
How many names are you going to save:3
Type a name: Type a name: John Doe
Type a name: John Lennon
Run Code Online (Sandbox Code Playgroud)
注意它是如何跳过第一个名字的?它跳过它并直接进入第二个名称输入.我试过看是什么导致了这个,但我似乎无法指出它.我希望有一个人可以帮助我.谢谢
我正在编写一个简单的程序,提示用户输入一些学生,然后要求用户输入每个学生的姓名和分数,以确定哪个学生的分数最高.
我编写了程序代码并编译.第一行要求一些学生并等待输入.第二行应该是要求学生姓名并等待输入,然后第三行应该打印ans询问该学生的分数,并等待输入但是在第二行打印后,立即调用第三行(第二行是等不及输入)然后在尝试在第三行之后输入所请求的信息时出现运行时错误.
如何调整代码以便在打印第三行之前打印第二行并等待输入字符串?
import java.util.Scanner;
public class HighestScore {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter the number of students: ");
int numOfStudents = input.nextInt();
System.out.print("Enter a student's name: ");
String student1 = input.nextLine();
System.out.print("Enter that student's score: ");
int score1 = input.nextInt();
for (int i = 0; i <= numOfStudents - 1; i++) {
System.out.println("Enter a student's name: ");
String student = input.nextLine();
System.out.println("Enter that student's score: ");
int score = input.nextInt();
if (score …Run Code Online (Sandbox Code Playgroud) 我正在开发一款游戏,我的扫描仪遇到了一些问题.我的资源泄漏扫描程序从未关闭过.
但我以为我的扫描仪在没有关闭它之前就已经工作了.但现在不是.有人可以帮帮我吗?
import java.util.Scanner;
public class Main {
public static final boolean CHEAT = true;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int amountOfPlayers;
do {
System.out.print("Select the amount of players (1/2): ");
while (!scanner.hasNextInt()) {
System.out.println("That's not a number!");
scanner.next(); // this is important!
}
amountOfPlayers = scanner.nextInt();
while ((amountOfPlayers <= 0) || (amountOfPlayers > 2));
System.out.println("You've selected " + amountOfPlayers+" player(s).");
}
}
Run Code Online (Sandbox Code Playgroud) 我正在研究一个程序,我希望允许用户在出现提示时输入多个整数.我曾尝试使用扫描仪,但我发现它只存储用户输入的第一个整数.例如:
输入多个整数:1 3 5
扫描仪只能获得第一个整数1.是否可以从一行获得所有3个不同的整数,并且以后能够使用它们?这些整数是我需要根据用户输入操作的链表中数据的位置.我无法发布我的源代码,但我想知道这是否可行.
我正在尝试使一个小程序更强大,我需要一些帮助.
Scanner kb = new Scanner(System.in);
int num1;
int num2 = 0;
System.out.print("Enter number 1: ");
num1 = kb.nextInt();
while(num2 < num1) {
System.out.print("Enter number 2: ");
num2 = kb.nextInt();
}
Run Code Online (Sandbox Code Playgroud)
2号必须大于1号
此外,我希望程序自动检查并忽略用户是否输入字符而不是数字.因为现在当用户输入例如r而不是数字时,程序就会退出.
我有一个文本文件,其中包含以下内容:
ac und
accipio annehmen
ad zu
adeo hinzugehen
...
Run Code Online (Sandbox Code Playgroud)
我读了文本文件并遍历这些行:
Scanner sc = new Scanner(new File("translate.txt"));
while(sc.hasNext()){
String line = sc.nextLine();
}
Run Code Online (Sandbox Code Playgroud)
每行有两个单词.java中是否有任何方法可以获取下一个单词,还是必须拆分行字符串来获取单词?
我正在编写一个程序,允许用户输入他的数据然后输出它.它的3/4是正确的但是当它到达输出地址时它只打印一个字,只能说'Archbishop'来自'Archbishop Street'.我该如何解决?
import java.util.*;
class MyStudentDetails{
public static void main (String args[]){
Scanner s = new Scanner(System.in);
System.out.println("Enter Your Name: ");
String name = s.next();
System.out.println("Enter Your Age: ");
int age = s.nextInt();
System.out.println("Enter Your E-mail: ");
String email = s.next();
System.out.println("Enter Your Address: ");
String address = s.next();
System.out.println("Name: "+name);
System.out.println("Age: "+age);
System.out.println("E-mail: "+email);
System.out.println("Address: "+address);
}
}
Run Code Online (Sandbox Code Playgroud) 之间有什么区别BufferedReader,BufferedInputStream并Scanner在Java?BufferedReader读取文本并BufferedInputStream读取byte.除此之外有什么区别吗?
这是一个可以用作重复目标的规范问题/答案.这些要求基于每天发布的最常见问题,可根据需要添加.它们都需要相同的基本代码结构才能进入每个场景,并且它们通常彼此依赖.
扫描仪看起来像一个"简单"的类,这是第一个错误的地方.它并不简单,它具有各种非明显的副作用和异常行为,以非常微妙的方式打破了最小惊讶原则.
所以这对于这个课程来说似乎有些过分,但洋葱错误和问题的剥离都很简单,但由于它们的相互作用和副作用,它们非常复杂.这就是为什么每天在Stack Overflow上有很多关于它的问题.
大多数Scanner问题包括尝试不止一次这些事情.
我希望能够让我的程序在每次上一次输入后自动等待下一个输入.
我想知道如何检测退出命令并在输入该命令时结束我的程序.
我想知道如何以不区分大小写的方式匹配exit命令的多个命令.
我希望能够匹配正则表达式模式以及内置基元.例如,如何匹配看似日期(2014/10/18)的内容?
我想知道如何匹配可能不容易用正则表达式匹配实现的东西 - 例如,URL(http://google.com).
在Java世界中,Scanner是一个特殊情况,它是一个非常挑剔的课程,教师不应该给新学生使用说明.在大多数情况下,教师甚至不知道如何正确使用它.如果在专业的生产规范中使用它几乎没有,所以它对学生的价值是非常值得怀疑的.
使用Scanner意味着这个问题和答案提到的所有其他事情.Scanner关于如何解决这些常见问题并不仅仅是因为它Scanner几乎在所有Scanner出错的问题中始终存在共病问题.它永远不仅仅是关于next()vsnextLine(),这只是该类实现的挑剔的一个症状,在问题询问中的代码发布中总会存在其他问题Scanner.
答案显示了Scanner在StackOverflow上使用和询问的99%的案例的完整,惯用的实现.
特别是在初学者代码中.如果您认为这个答案过于复杂,那么Scanner请先告诉新学生使用的教师,然后再解释其复杂性,怪癖,非明显副作用及其行为的特点.
Scanner关于最小惊讶原则的重要性以及为什么一致的行为和语义在命名方法和方法论证中很重要,这是一个很好的教学时刻.
您可能永远不会真正看到
Scanner在专业/商业业务应用程序中使用,因为它所做的一切都是通过其他方式做得更好.真实世界的软件必须比Scanner允许您编写代码更具弹性和可维护性.真实世界的软件使用标准化的文件格式解析器和文档格式,而不是独立分配中给出的特殊输入格式.