Java 循环扫描仪输入直到输入或 "e" 没有 .split
Java loop scanner input until enter or "e" without .split
public class test {
private static Scanner userpress = new Scanner(System.in);
public static void main(String[] args) {
int r = 0;
int h = 0;
System.out.println("---------------------------------");
System.out.println("write your two numbers (numerator, denominator)");
userpress.useDelimiter("\s"); // here
while (userpress.hasNextInt()) {
r = userpress.nextInt();
h = userpress.nextInt();
// userpress.nextLine(); // remove
int x = r / h;
System.out.print(x + " ");
}
}
private static void message() {
System.out.println("user pressed e");
}
}
这个程序要求用户至少输入2个,第一个输入是分子,第二个是分母,然后它会给出numerator/denominator的值并打印出来。
这是我想要做的:我希望能够写下尽可能多的数字,例如 10 5 20 4
,输出应该是 2, 5
如果我写 10 5 20 4 30 5
输出应该是 2, 5, 6
。然而,这只适用于偶数。如果我写的是奇数,例如 10 5 3
,那么程序就会崩溃,因为 2 没有被除以任何东西。我希望程序在不均匀的情况下删除最后一个输入,例如,如果输入为 10 5 3
,则输出应为 2
,因为 10/5=2 并且应丢弃最后一个输入。我该如何解决这个问题?
问题 2:例如,如果我在数字后面写一个 e
; 10 5 20 4 e
,那么我希望输出为2, 5 user pressed e
我不想使用 .split,我必须使用 hasnext...
和 next()
您可以使用正则表达式来检查 space,而不是只取 space 之前的第一部分。
像这样:
import java.util.Scanner;
public class Main {
private static Scanner userpress = new Scanner(System.in);
public static void main(String[] args) {
String first;
String second;
System.out.println("---------------------------------");
System.out.println("write your two numbers (numerator, denominator)");
userpress.useDelimiter("\s"); // here
while (userpress.hasNextLine()) {
first = userpress.nextLine();
second = userpress.nextLine();
if(first.contains(" ") || second.contains(" ")) {
String[] firstParts = first.split(" ");
String[] secondParts = second.split(" ");
first = firstParts[0];
second = secondParts[0];
}
// userpress.nextLine(); // remove
int x = Integer.valueOf(first) / Integer.valueOf(second);
System.out.print(x + " ");
}
}
private static void message() {
System.out.println("user pressed e");
}
}
您的代码存在的问题是您通过一次检查 userpress.hasNextInt()
来扫描两个整数。每次扫描整数时都应该进行此检查。
工作代码:
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
int r = 0;
int h = 0;
System.out.print("Write your two numbers (numerator, denominator): ");
Scanner userpress = new Scanner(System.in);
userpress.useDelimiter("\s");
while (userpress.hasNextInt()) {
r = userpress.nextInt();
if (userpress.hasNextInt()) {
h = userpress.nextInt();
int x = r / h;
System.out.print(x + " ");
} else {
break;
}
}
String s = userpress.next();
if ("e".equalsIgnoreCase(s)) {
message();
}
}
private static void message() {
System.out.println("user pressed e");
}
}
样本运行:
Write your two numbers (numerator, denominator): 10 5 3 e
2 user pressed e
另一个样本运行:
Write your two numbers (numerator, denominator): 10 5 3
2
另一个样本运行:
Write your two numbers (numerator, denominator): 10 5 20 5
2 4
另一个样本运行:
Write your two numbers (numerator, denominator): 10 5 20 5 e
2 4 user pressed e
或者,如果您不介意多使用一点 space,您可以想出一个简单的算法,例如:
public class Main {
private static Scanner userpress = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("---------------------------------");
System.out.println("write your two numbers (numerator, denominator)");
userpress.useDelimiter("\s");
List<Integer> numbers = new ArrayList<>();
while(userpress.hasNextInt()) {
numbers.add(userpress.nextInt());
}
for (int i=0; i<numbers.size()-1; i+=2) {
int x = numbers.get(i)/numbers.get(i+1);
System.out.print(x + " ");
}
}
}
public class test {
private static Scanner userpress = new Scanner(System.in);
public static void main(String[] args) {
int r = 0;
int h = 0;
System.out.println("---------------------------------");
System.out.println("write your two numbers (numerator, denominator)");
userpress.useDelimiter("\s"); // here
while (userpress.hasNextInt()) {
r = userpress.nextInt();
h = userpress.nextInt();
// userpress.nextLine(); // remove
int x = r / h;
System.out.print(x + " ");
}
}
private static void message() {
System.out.println("user pressed e");
}
}
这个程序要求用户至少输入2个,第一个输入是分子,第二个是分母,然后它会给出numerator/denominator的值并打印出来。
这是我想要做的:我希望能够写下尽可能多的数字,例如 10 5 20 4
,输出应该是 2, 5
如果我写 10 5 20 4 30 5
输出应该是 2, 5, 6
。然而,这只适用于偶数。如果我写的是奇数,例如 10 5 3
,那么程序就会崩溃,因为 2 没有被除以任何东西。我希望程序在不均匀的情况下删除最后一个输入,例如,如果输入为 10 5 3
,则输出应为 2
,因为 10/5=2 并且应丢弃最后一个输入。我该如何解决这个问题?
问题 2:例如,如果我在数字后面写一个 e
; 10 5 20 4 e
,那么我希望输出为2, 5 user pressed e
我不想使用 .split,我必须使用 hasnext...
和 next()
您可以使用正则表达式来检查 space,而不是只取 space 之前的第一部分。 像这样:
import java.util.Scanner;
public class Main {
private static Scanner userpress = new Scanner(System.in);
public static void main(String[] args) {
String first;
String second;
System.out.println("---------------------------------");
System.out.println("write your two numbers (numerator, denominator)");
userpress.useDelimiter("\s"); // here
while (userpress.hasNextLine()) {
first = userpress.nextLine();
second = userpress.nextLine();
if(first.contains(" ") || second.contains(" ")) {
String[] firstParts = first.split(" ");
String[] secondParts = second.split(" ");
first = firstParts[0];
second = secondParts[0];
}
// userpress.nextLine(); // remove
int x = Integer.valueOf(first) / Integer.valueOf(second);
System.out.print(x + " ");
}
}
private static void message() {
System.out.println("user pressed e");
}
}
您的代码存在的问题是您通过一次检查 userpress.hasNextInt()
来扫描两个整数。每次扫描整数时都应该进行此检查。
工作代码:
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
int r = 0;
int h = 0;
System.out.print("Write your two numbers (numerator, denominator): ");
Scanner userpress = new Scanner(System.in);
userpress.useDelimiter("\s");
while (userpress.hasNextInt()) {
r = userpress.nextInt();
if (userpress.hasNextInt()) {
h = userpress.nextInt();
int x = r / h;
System.out.print(x + " ");
} else {
break;
}
}
String s = userpress.next();
if ("e".equalsIgnoreCase(s)) {
message();
}
}
private static void message() {
System.out.println("user pressed e");
}
}
样本运行:
Write your two numbers (numerator, denominator): 10 5 3 e
2 user pressed e
另一个样本运行:
Write your two numbers (numerator, denominator): 10 5 3
2
另一个样本运行:
Write your two numbers (numerator, denominator): 10 5 20 5
2 4
另一个样本运行:
Write your two numbers (numerator, denominator): 10 5 20 5 e
2 4 user pressed e
或者,如果您不介意多使用一点 space,您可以想出一个简单的算法,例如:
public class Main {
private static Scanner userpress = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("---------------------------------");
System.out.println("write your two numbers (numerator, denominator)");
userpress.useDelimiter("\s");
List<Integer> numbers = new ArrayList<>();
while(userpress.hasNextInt()) {
numbers.add(userpress.nextInt());
}
for (int i=0; i<numbers.size()-1; i+=2) {
int x = numbers.get(i)/numbers.get(i+1);
System.out.print(x + " ");
}
}
}