import java.util.InputMismatchException; import java.util.Scanner; public class CLI { private static Scanner input = new Scanner(System.in); private static String readLine(String str1) { System.out.print("Type some text:"); String str = input.nextLine(); return str; } private static int readPosInt(String str2) { while(true) { System.out.print("Type some integer:"); int i; while(true) { try { i= input.nextInt(); System.out.println("i:"+i); break; }catch(InputMismatchException e){ System.out.println("You must type an integer!"); input.nextLine(); } } if(i>=0) { return i; }else { System.out.println("Positive intefers only!"); } } } public static void main(String[] args) { String str1 = readLine("Type some text: "); System.out.println("Text read is: " + str1); int i = readPosInt("Type an integer: "); System.out.println("Integer read is: " + i); String str2 = readLine("Type some text again: "); System.out
时间: 2023-12-06 11:41:57 浏览: 264
't.println("Text read is: " + str2); } }
这段代码是一个简单的命令行交互程序,它包含了两个方法readLine和readPosInt,分别用于读取字符串和正整数。在main方法中,先通过readLine方法读取一个字符串并输出,然后通过readPosInt方法读取一个正整数并输出,最后再通过readLine方法读取一个字符串并输出。
readLine方法通过Scanner类的nextLine方法读取用户输入的一行字符串,并将其返回。
readPosInt方法通过Scanner类的nextInt方法读取用户输入的整数,如果输入的不是整数,则提示用户重新输入,直到输入的是整数为止。如果输入的整数小于0,则提示用户重新输入正整数,直到输入的是正整数为止。最后将输入的正整数返回。
相关问题
import java.io.File; import java.util.InputMismatchException; import java.util.Scanner; import java.io.PrintWriter; public class Main { public static void main(String[] args)throws InputMismatchException { try {String str; File test = new File("e://test.txt"); System.out.println(test.exists()); Scanner input = new Scanner("e//test.txt"); int l=0; int c=0; int w=0; while ((str=input.nextLine())!=null) { l++; c+=str.length(); } while((str=input.next())!=null){ w++; } System.out.println("文件字符个数为:"+c); System.out.println("文件行数为:"+l); System.out.println("文件单词个数为:"+w); } catch (InputMismatchException exception){ System.out.println("InputMismatchException"); } } }哪里错误
这段代码可能存在以下错误:
1. 在使用 Scanner 类读取文件时,应该传入文件对象而不是文件路径字符串。代码中使用的是 "e//test.txt" 字符串,应该改为 new File("e://test.txt")。
2. 在使用 Scanner 类读取文件时,应该使用 hasNextLine() 和 hasNext() 方法来检查是否还有下一行和下一个单词可读取。代码中使用的是 while 循环来读取文件,这会导致程序进入死循环。
3. 在统计单词个数时,应该使用正则表达式来判断单词的边界,例如 "\\b\\w+\\b" 可以匹配一个或多个字母组成的单词。代码中使用的是 input.next(),这只能读取一个单词,无法正确地统计单词个数。
修正后的代码可能类似于下面这样:
```java
import java.io.File;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
try {
File file = new File("e://test.txt");
System.out.println(file.exists());
Scanner input = new Scanner(file);
int lines = 0;
int chars = 0;
int words = 0;
while (input.hasNextLine()) {
String line = input.nextLine();
lines++;
chars += line.length();
words += line.split("\\b\\w+\\b").length;
}
System.out.println("文件字符个数为:" + chars);
System.out.println("文件行数为:" + lines);
System.out.println("文件单词个数为:" + words);
} catch (Exception e) {
e.printStackTrace();
}
}
}
```
帮我检查以下代码Import java.util.InputMismatchException; import java.util.Scanner; public class CLI { private static Scanner input = new Scanner(System.in); private static String readLine(String str1) { String str1 = input.nextLine(); System.out.print("Type some text:"); return str1; } private static int readPosInt(String str2) { while(true) { System.out.print("Type some integer:"); int i=input.nextInt(); /*if(i<0) { throw new InputMismatchException("You must type an integer!"); }*/ while(true) { try { i= input.nextInt(); System.out.println("i:"+i); break; }catch(InputMismatchException e){ System.out.println("You must type an integer!"); input.nextLine(); } } if(i>0||i==0) { return i; }else { System.out.println("Positive intefers only!"); } } } public static void main(String[] args) { String str1 = readLine("Type some text: "); System.out.println("Text read is: " + str1); int i = readPosInt("Type an integer: ");
在readLine方法中,你定义了一个String类型的参数str1,但是在方法内部又重新定义了一个同名的变量,这会导致编译错误。你可以将方法内部的变量名改为其他名称。例如:
```
private static String readLine(String prompt) {
System.out.print(prompt);
String str = input.nextLine();
return str;
}
```
在readPosInt方法中,你在while循环外部定义了一个变量i,然后在while循环内部又重新定义了一个同名的变量。这会导致逻辑错误。你可以将while循环内部的变量改为其他名称。例如:
```
private static int readPosInt(String prompt) {
while(true) {
System.out.print(prompt);
int i;
while(true) {
try {
i = input.nextInt();
System.out.println("i: " + i);
break;
}catch(InputMismatchException e){
System.out.println("You must type an integer!");
input.nextLine();
}
}
if(i>=0) {
return i;
}else {
System.out.println("Positive integers only!");
}
}
}
```
这样修改后,代码就不会有编译错误和逻辑错误了。
阅读全文