我正在尝试编写一个程序来查找用户提供的最长文本行。但是,它不能正常工作;它给出了最后输入的数组,但缺少第一个字母。
import java.io.*;
public class longestNoCopy{
static final int MAXLINE = 100;
public static void main(String[] args) throws IOException{
int len;
int max;
char line[] = new char[MAXLINE];
char longest[] = new char[MAXLINE];
max=0;
while((len=getLine(line,MAXLINE))>0){
System.out.printf("len: %d\n", len);
if(len>max){
// System.out.println("New record");
max=len;
longest=line;
}
/* System.out.print("\nLine: ");
for(int i=0;line[i]!=0;i++)
System.out.print(line[i]);*/
System.out.println("Longest line so far:");
for(int i=0;longest[i]!=0;i++)
System.out.print(longest[i]);
}
if(max>0){
System.out.printf("Longest line:\n");
int i;
for(i=0;i<longest.length;i++)
System.out.print(longest[i]);
System.out.printf("\ni: %d, Length: %d\n", i, max);
}
}
static int getLine(char s[], int lim) throws IOException{
InputStreamReader r = new InputStreamReader(System.in);
int c = 0, i = 0;
for(i=0;i<lim-1&&(c=r.read())!=-1&&c!='\n';++i){
s[i]=(char)c;
// System.out.printf("s[%d]: %c\n", i, s[i]);
}
if(c=='\n'){
s[i]=(char)c;
++i;
}
// System.out.printf("i: %d\n", i);
s[i]='\0';
return i;
}
}
我注释掉了一些打印语句,因此您可以选择激活它们。如果我输入:
Hi
my
name
is
它说:最长的行:s
而最长的一行应该是:name 顺便说一下,我在 Ubuntu 命令行上运行并使用 Ctrl+D 退出。我知道很多代码很奇怪;我拿了一些 C 代码并尝试更改它,直到它变成一个 Java 程序来比较两种语言。为什么会发生此错误?需要强调的是,我知道这不是用 Java 做事的常用方法,我知道 Scanner 类等。我没有将此代码用于实际应用程序。我只想知道为什么会出现这个错误。
慕尼黑8549860
相关分类