在我们的课堂上,我们开始学习Java,我们受命解释为什么编写此代码:
library(tidyverse)
tbl <- tibble("A" = letters[1:4], "B" = letters[26:23], "C" = letters[c(1,3,5,7)], "D" = letters[c(2,4,6,8)], "pastecols" = c("B, C","B, D", "B, C, D", NA))
tbl %>%
rowid_to_column() %>%
mutate(
pastecols = str_c("A, ", pastecols),
pastecols = if_else(is.na(pastecols), "A", pastecols)
) %>%
gather(colname, value, -pastecols, -rowid) %>%
separate_rows(pastecols) %>%
filter(pastecols == colname) %>%
group_by(rowid) %>%
summarise(
pastecols = str_c(pastecols, collapse = ", "),
result = str_c(value, collapse = ", ")
)
#> # A tibble: 4 x 3
#> rowid pastecols result
#> <int> <chr> <chr>
#> 1 1 A, B, C a, z, a
#> 2 2 A, B, D b, y, d
#> 3 3 A, B, C, D c, x, e, f
#> 4 4 A d
输出以下内容: output
在此屏幕快照中,我刚刚启动程序并键入“ a”,然后按Enter。
当我运行程序时,它要求我输入第一个字符,然后应要求我输入第二个字符,但是它跳过了该行并打印出“不同”的末尾。我不知道为什么。
代码应比较用户输入的两个字符,如果它们相同,则应打印“ Same”,否则应显示“ different”。
谢谢您的回答!
答案 0 :(得分:1)
在这些情况下,您可能需要使用扫描仪:
class Inputif {
public static void main(String args[]) throws java.io.IOException {
char ch, ch2;
Scanner scanner = new Scanner(System.in);
System.out.print("Hit a key and press Enter: ");
ch = scanner.next().charAt(0);
System.out.println("Hit a second key and press Enter: ");
ch2 = scanner.next().charAt(0);
if (ch == ch2)
System.out.println("Same");
else
System.out.println("different");
}
}
这只是一个例子。您的问题是换行符,因此Scanner可以在这里为您提供帮助。
答案 1 :(得分:1)
我对您的程序进行了一些更改,以使您对正在发生的事情有所了解:
public static void main(String args[]) throws java.io.IOException {
char ch, ch2;
System.out.print("Hit a key and press Enter: ");
ch = (char) System.in.read();
System.out.println("Hit a second key and press Enter: ");
ch2 = (char) System.in.read();
int x1=ch;
int x2 = ch2;
System.out.println("x1="+x1+" | x2="+x2);
if (ch == ch2) System.out.println("Same"); else System.out.println("different");
}
两次运行以上程序: -输入“ a”,然后按Enter。 -按下Enter键两次
说明: System.in是InputStream和InputStream https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html的read方法的实例,该方法“从输入流中读取下一个数据字节”。 问题是,当您再次按Enter键时,您正在向输入流中添加一个额外的字节,并且ch2总是将其存储。 *注意:x1,x2将显示您击中的字符的ASCII码。
答案 2 :(得分:0)
好吧,正如已经说过的那样,您从Scanner进行的第二次阅读会在您的第一个字符之后读取一些内容,并且该内容是换行符(或您认为的Enter键)。您不那么相信,执行以下代码:
public class Helper {
public static void main(String[] args) throws IOException {
char ch, ch2;
System.out.print("Hit a key and press Enter: ");
ch = (char) System.in.read();
System.out.println("your first read contains " + ch);
System.out.println("Hit a second key and press Enter: ");
ch2 = (char) System.in.read();
System.out.println("your second read contains " + ch2);
if (ch == ch2) System.out.println("Same");
else System.out.println("different");
}
}
输出:
请参见第5行中的新行...
现在,如果您按Enter键两次(第一个和第二个字符),结果将是 相同!
P.S。 您可以使用调试器来代替打印到控制台,这是首选方法。