在用户尝试猜测数字 7 次后,我无法停止 do-while 循环。我不确定如何告诉循环停止并显示超时消息。
谢谢,我感谢任何帮助!
代码:
import java.util.Random;
import java.util.Scanner;
public class numberGuesses {
public static void main (String [] args){
Random rand = new Random();
int inputNumber;
int randomNumber = rand.nextInt(100) + 1;
int guessingLimit = 7;
System.out.println("Rand Number = " +randomNumber); //Temp to test program with correct number
Scanner scan = new Scanner (System.in);
do {
System.out.print("Please enter a number: ");
inputNumber = scan.nextInt();
if (inputNumber > randomNumber)
System.out.println("That's too high!");
if (inputNumber < randomNumber)
System.out.println("That's too …Run Code Online (Sandbox Code Playgroud) 当在 Integer 类构造函数中传递字符值而不是整数值时,以下代码将引发NumberFormatException
class Wrap
{
public static void main(String...args)
{
Integer j=new Integer("s");
System.out.println(j);
}
}
Run Code Online (Sandbox Code Playgroud)
当用户输入字符值而不是整数值时,以下代码将引发InputMismatchException
import java.util.Scanner;
class User
{
public static void main(String...args)
{
Scanner obj=new Scanner(System.in);
int i=obj.nextInt();
int j=obj.nextInt();
System.out.println("sum of numbers input by user");
System.out.println(i+j);
}
}
Run Code Online (Sandbox Code Playgroud)
这两个异常似乎都是在相同的场景中抛出的,那么它们有何不同呢?
java exception number-formatting java.util.scanner inputmismatchexception
想象一下以下 scanario:我有一个程序要求输入一个整数,然后是一个字符串输入。
int age=0;
String name;
Scanner sc = new Scanner(System.in);
System.out.print("Enter Age: ");
age = sc.nextInt();
System.out.print("Enter Name: ");
name= sc.nextLine();
Run Code Online (Sandbox Code Playgroud)
使用aobe代码,我没有机会输入名字。所以通常我会声明 2 个扫描仪对象,如下所示:
int age=0;
String name;
Scanner sc = new Scanner(System.in);
Scanner sc2 = new Scanner(System.in); //2nd Scanner object
System.out.print("Enter Age: ");
age = sc.nextInt();
System.out.print("Enter Name: ");
name= sc2.nextLine(); //Using 2nd Scanner Object
Run Code Online (Sandbox Code Playgroud)
我的问题是:是否有必要声明多个扫描仪对象来接受不同类型的输入?我是否按照 aobve 的正确方式进行操作?
这个问题我已经考虑了很多年了。(SO 中的几个问题提到了多个扫描仪,但他们的问题只使用了一个扫描仪对象,所以我今天问这个。)
我想做一个不能为空的扫描仪。因此,当扫描仪中没有任何内容时按下 Enter 键时,我想发出警告消息。我有这段代码。
if (user_input.hasNext())// only if scanner is empty and enter is pressed{
System.out.println("Scanner can not be empty");
}
Run Code Online (Sandbox Code Playgroud) import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
public class MainProgram {
public static void main(String[] args ) throws IOException{
String seconds = " ";
Scanner sc2 = null;
try {
sc2 = new Scanner(new File("/Users/mohammadmuntasir/Downloads/customersfile.txt"));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
boolean first = true;
while (sc2.hasNextLine()) {
Scanner s2 = new Scanner(sc2.nextLine());
while (s2.hasNext()) {
String s = s2.next();
if (first == true){
seconds = s;
first = false;
}
}
}
System.out.println(Integer.parseInt(seconds)); // causes ERROR?
} …Run Code Online (Sandbox Code Playgroud) 我有以下文件 lines.txt
Line1
Line2
Line3
Run Code Online (Sandbox Code Playgroud)
我正在使用扫描仪逐行解析此文件的内容。我在 LinesReader.java 中有以下设置
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Line {
Line(String content) {
this.content = content;
}
public String content;
public String toString() {
return content;
}
}
public class LinesReader {
public static Line buildLine(InputStream is) {
Scanner scanner = new Scanner(is);
if (scanner.hasNextLine()) {
return new Line(scanner.nextLine());
}
return null;
}
public static Line buildLine(Scanner scanner) {
if (scanner.hasNextLine()) {
return new Line(scanner.nextLine());
}
return …Run Code Online (Sandbox Code Playgroud) 我注意到,在使用扫描仪时,如果我想设置分隔符或区域设置等属性,则执行此操作的方法会返回对象Scanner本身:
public Scanner useDelimiter(String pattern) {
modCount++;
delimPattern = patternCache.forName(pattern);
return this;
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是,如果属性被更改(而不是创建一个新对象),为什么它会返回一个Scanner对象而不是void?这并不是说我必须将返回值存储在变量中 - 事实上,如果我尝试这样做,就像下面的代码一样,Eclipse 将给出以下消息Resource leak: 'lineScanner' is not closed at this location:
Scanner scanner = new Scanner(new File("accounts.csv"));
String line;
while(scanner.hasNextLine()) {
line = scanner.nextLine();
Scanner lineScanner = new Scanner(line);
lineScanner = lineScanner.useDelimiter(",");
...
}
Run Code Online (Sandbox Code Playgroud) 我想为扫描程序指定分隔符,该分隔符在某些模式上分割,但不会从标记中删除该模式.我似乎无法使这项工作,因为正则表达式识别的任何东西也被作为分隔符的一部分被吃掉.有什么建议?
我的具体问题,我的文件看起来像:
text/numbers mix
numbers
numbers
text/numbers mix
numbers
numbers
numbers
.
.
Run Code Online (Sandbox Code Playgroud)
我想从文本/数字mix +行中分离出来,直到下一个文本/数字混合.我有正则表达式来识别它们,但正如所述,使用它作为分隔符吃掉了我想要的部分.
编辑:代码添加:
static final String labelRegex="\\s*[^01\\s*]\\w+\\s*";
static final Pattern labelPattern = Pattern.compile(labelRegex, Pattern.MULTILINE);
Run Code Online (Sandbox Code Playgroud)
是我用来识别文本/数字位的模式(我知道我的数字行包含由空格分隔的所有1/0).
当我初始化扫描仪时:
stateScan = new Scanner(new BufferedReader(new FileReader(source)));
stateScan.useDelimiter(labelPattern);
Run Code Online (Sandbox Code Playgroud)
吃标签,然后离开行.我目前有一个工作实现,它在同一来源的两个缓冲文件读取器上启动两个扫描器,一个按州分开,另一个按标签分割.我真的希望它只是一个抓住标签+状态.
boolean z = false;
do {
try {
a = sc.nextInt();
z = true;
}
catch(Exception e) {
}
}
while(!z);
Run Code Online (Sandbox Code Playgroud)
试试这个.如果在第一次正确执行时尝试整数.但是,如果输入错误的文本类型,即使您输入int next并跳过将布尔值赋值为true,它也会变为无限循环.为什么是这样?
编辑:搞清楚,错放了一段代码
我有一个程序,可以从文件中计算斜率.文件所在的格式如下:
Y2'空间'Y1'空间'X2'空间'X1'空间'
我正在使用扫描仪从文件中读取字符串,然后将它们转换为double或整数.我这样做的原因是因为它似乎不会从文本文件只读取字符串中的双精度或整数.这是我的一些代码:
modelSlopes.clear();
modelValues.clear();
int returnVal = openFileChooser.showOpenDialog(this);
if (returnVal == JFileChooser.APPROVE_OPTION) {
File file = openFileChooser.getSelectedFile();
try {
Scanner fileScanner = new Scanner(new FileReader(file));
int count = 1;
boolean suc = true;
while (fileScanner.hasNext()) {
suc = true;
double tmp1 = 0;
double tmp2 = 0;
double tmp3 = 0;
double tmp4 = 0;
try {
if(count == 1) {
tmp1 = Double.valueOf(fileScanner.next());
}
if(count == 2) {
tmp2 = Double.valueOf(fileScanner.next());
}
if(count == 3) {
tmp3 …Run Code Online (Sandbox Code Playgroud)