输入格式
从stdin(System.in)
读取一些未知的n行输入,直到达到EOF;每行输入都包含一个非空字符串。
输出格式
对于每一行,打印行号,后跟一个空格,然后接收作为输入的行内容:
示例输出
Hello world
I am a file
Read me until end-of-file.
这是我的解决方案。问题是我无法继续进行EOF。 但输出只是:
Hello world
这是我的代码:
public class Solution {
public static void main(String[] args) {
check(1); // call check method
}
static void check(int count) {
Scanner s = new Scanner(System.in);
if(s.hasNext() == true) {
String ns = s.nextLine();
System.out.println(count + " " + ns);
count++;
check(count);
}
}
}
答案 0 :(得分:6)
您的代码无效,因为您在每次递归调用中都创建了一个新的Scanner
对象。
不管怎么说,你不应该使用递归,而是迭代地进行。
迭代版
public class Solution {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int count = 1;
while(s.hasNext()) {
String ns = s.nextLine();
System.out.println(count + " " + ns);
count++;
}
}
}
递归版
public class Solution {
private Scanner s;
public static void main(String[] args) {
s = new Scanner(System.in); // initialize only once
check(1);
}
public static void check(int count) {
if(s.hasNext()) {
String ns = s.nextLine();
System.out.println(count + " " + ns);
check(count + 1);
}
}
}
答案 1 :(得分:2)
更改
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(getResources().getColor(
R.color.your_color));
}
setContentView(R.layout.your_layout);
//Your implementation
}
为:
if (s.hasNext() == true) {
String ns = s.nextLine();
System.out.println(count + " " + ns);
count++;
System.out.print(count);
check(count);
}
while (s.hasNext()) {
String ns = s.nextLine();
System.out.println(count + " " + ns);
count++;
System.out.print(count);
check(count);
}
循环一直持续到数据存在,而while
仅检查一次。
答案 2 :(得分:1)
如果要求使用递归,则可以使用辅助函数:
static void check(int count) {
Scanner s = new Scanner(System.in);
check(count, s);
}
static void check(int count, Scanner scanner) {
if(!scanner.hasNext()) {
return;
}
String ns = scanner.nextLine();
System.out.println(count + " " + ns);
check(++count, scanner);
}
注意new Scanner(System.in)
仅被调用一次。
答案 3 :(得分:1)
Scanner
有点BufferedReader
(我不是在讲述继承或其他什么。我告诉他们两个都有缓冲区。Scanner
只有一个小缓冲区。)因此,在控制台中输入文本后,这些文件将read()
System.in
并存储在Scanner
内的缓冲区中。
public static void main(String[] args) {
Scanner s1 = new Scanner(System.in);
s1.hasNext();
Scanner s2 = new Scanner(System.in);
while(true){
System.out.println("Read line:: " + s2.nextLine());
}
}
将以下输入用于Scanner
:
第1行 第2行 第3行 第4行
您将获得输出:
读取行:: e 1
读行::第2行
读行::第3行
读取行::第4行
我想你可能知道这个输出的原因。第一行的某些字符位于Scanner s1
中。因此,不创建2 Scanner
来从同一Stream
获取输入。
您可以按如下方式更改代码以获得所需的输出。
private static Scanner s;
public static void main(String[] args) {
s = new Scanner(System.in);
check(1); // call check method
}
static void check(int count) {
if (s.hasNextLine()) {
String ns = s.nextLine();
System.out.println(count + " " + ns);
count++;
check(count);
}
}
在逐行阅读时,您可以使用s.hasNextLine()
代替s.hasNext()
。
当且且仅当s.hasNextLine()==true
为true
时,无需使用s.hasNextLine()
,因为该语句将为true
。
您可以使用Windows系统中的EOF
和Unix中的Ctrl+Z
将Ctrl+D
字符提供给控制台。据我所知,您无法使用NetBeans的输出窗口发送EOF
字符。
答案 4 :(得分:0)
public static void main(String[] args) {
List<String> eol = new ArrayList<String>();
Scanner in=new Scanner(System.in);
int t=1;
while(in.hasNext()){
eol.add(in.nextLine());
}
for (String i:eol){
System.out.println(t+" "+i);
t++;
}
}
答案 5 :(得分:0)
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int count = 1;
while(scan.hasNext()){
System.out.println(count++ + " " + scan.nextLine());
}
}
答案 6 :(得分:0)
这是无错误程序。
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int count = 1;
while(scan.hasNext()) {
String s = scan.nextLine();
System.out.println(count + " " + s);
count++;
}
}
}
答案 7 :(得分:0)
Scanner scanner = new Scanner(System.in);
int i = 1;
while(scanner.hasNext()) {
System.out.println(i + " " + scanner.nextLine());
i++;
}
答案 8 :(得分:0)
使用while而不是if,但递归版本更好。这是迭代版本:
import java.io.*;
import java.util.*;
public class Solution {
public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
Scanner sc=new Scanner(System.in);
{
int i=0;
while(sc.hasNext()==true)
{
i=i+1;
String s=sc.nextLine();
System.out.println(i+" "+s);
};
}
}
}
答案 9 :(得分:0)
java.util.Scanner.hasNext()
基本上可以帮助您阅读输入。如果此扫描程序的输入中包含其他任何类型的令牌,则此方法返回true。否则返回false。
检查以下代码段,
while(sc.hasNext()) {
System.out.println(i + " " + sc.nextLine());
i++;
}
您可以在下面的链接中找到完整的代码,
https://github.com/hetalrachh/HackerRank/blob/master/Practice/Java/Introduction/EndOfFile.java
答案 10 :(得分:0)
您可以尝试这样获得所需的结果:
公开类EOF {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
for(int i =1;scan.hasNext();i++) {
String line = scan.nextLine();
System.out.println(i + " " + line);
}
scan.close();
}
}
答案 11 :(得分:0)
public class Solution {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
for(int i=1; scan.hasNext() ;
System.out.println(i++ +" "+scan.nextLine()));
}
}