帮我找到一种方法从一行读取用户3整数,然后将每个saparately视为a,b,c ..请快速,因为我曾尝试读取整行,但我想处理每个整数后来的陈述
import java.util.Scanner;
public class MHDKhaledTotonji_301300797 {
public static void main(String[] args){
Scanner input=new Scanner(System.in);
int M,a,b,c;
System.out.println("Please, insert the normal dose in ml");
M = input.nextLine();
}
}
答案 0 :(得分:2)
do
{
Application.DoEvents(); // handle Windows Forms events
byteRead = COMport.ReadByte();
} while (byteRead != 75); // ASCII K = 75
需要:1 2 3
答案 1 :(得分:1)
nextLine()
返回String
,因此M
应定义为String
。
Java命名约定通常声明变量应以小写字母开头,因此M
应为m
。
至于在一行中从用户获取3个整数的任务,您有多个选择,这取决于您希望的严格程度以及您需要多少错误处理。
对于非常简单的解决方案,没有错误处理(在错误输入时杀死程序),Scanner
就是答案。可以添加错误处理,但是很麻烦。
Scanner in = new Scanner(System.in);
System.out.println("Please, insert the normal dose in ml");
int a = input.nextInt();
int b = input.nextInt();
int c = input.nextInt();
另一种解决方案可能是读取该行,就像您尝试的那样,然后拆分该行并解析值。多一点代码,但强制用户在一行中输入所有3,而#1解决方案没有。
Scanner in = new Scanner(System.in);
System.out.println("Please, insert the normal dose in ml");
String line = input.nextLine();
String[] values = line.split(" ");
int a = Integer.parseInt(values[0]);
int b = Integer.parseInt(values[1]);
int c = Integer.parseInt(values[2]);
为了更好地控制用户的行,可以使用正则表达式。这是完全错误处理。
Scanner in = new Scanner(System.in);
Pattern p = Pattern.compile("\\s*(\\d+)\\s+(\\d+)\\s+(\\d+)\\s*");
int a = 0, b = 0, c = 0;
for (;;) {
System.out.println("Please, insert the normal dose in ml");
String line = input.nextLine();
Matcher m = p.matcher(line);
if (m.matches())
try {
a = Integer.parseInt(m.group(1));
b = Integer.parseInt(m.group(2));
c = Integer.parseInt(m.group(3));
break;
} catch (Exception e) {/*fall thru to print error message*/}
System.out.println("** Bad input. Type 3 numbers on one line, separated by space");
}
答案 2 :(得分:0)
使用input.nextInt()
代替input.nextLine()
。这也是错误的,因为input.nextLine()
会返回String
,您应该parse
到integer
。
简单地将代码更改为:
M = input.nextInt();
a = input.nextInt();
b = input.nextInt();
c = input.nextInt();
请记住input.nextInt()
忽略包括换行符在内的每个空格,因此您无需担心从相同或不同的行读取。