英文:
Why do I have to write line = reader.readLine() in while for the second time? I thought I have already defined it above
问题
我会非常感激详细的回答,我已经尝试过 `while(line != null)`,但结果是 `ArrayIndexOutOfBoundsException`。
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
**String line = reader.readLine();**
int a = Integer.parseInt(line);
int max = 0;
int count = 0;
int intis[] = new int [500];
if ( a > 0 ){
while ( (**line = reader.readLine())** != null ) {
count++;
intis[count] = Integer.parseInt(line.trim());
}
for ( int i : intis ) {
if ( max < i ) max = i;
}
}
else {
}
System.out.println(max);
}
}
英文:
I would appreciate detailed answer, I have tried while(line != null)
but it ends up with ArrayIndexOutOfBoundsException
.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
**String line = reader.readLine();**
int a = Integer.parseInt(line);
int max = 0;
int count = 0;
int intis[] = new int [500];
if ( a > 0 ){
while ( (**line = reader.readLine())** != null ) {
count++;
intis[count] = Integer.parseInt(line.trim());
}
for ( int i : intis ) {
if ( max < i ) max = i;
}
}
else {
}
System.out.println(max);
}
}
答案1
得分: 1
有在定义变量和赋值变量之间存在差异,我认为你可能混淆了。
在第一行,你是完全正确的 - 你在定义 String line
(并且同时赋值为 reader.readLine()
)。这与while
循环内部的调用是不同的,循环内部的调用每次都会将变量重新赋值为不同的行。
只要知道,你的循环并不能阻止数组溢出,这就是为什么当你只检查line != null
时,会出现ArrayIndexOutOfBoundsException
。你可能想要向其中添加类似这样的内容,以确保这一点。你的文件可能只有少于500行,或者可能有501行。这有助于防范这种情况;如果行数少于500行,读取器会生成null
;如果行数更多,那么循环会停止,因为没有其他地方可以存储数据。
while(line = reader.readLine() != null && count < inits.length) {
// 逻辑
}
英文:
There's a difference between defining the variable and assigning the variable that I think you're conflating.
On the first line, you're absolutely right - you're defining String line
(and also assigning it the value reader.readLine()
). This is different from the invocations inside of the while
loop, which reassign the variable to a different line every time.
Just know that your loop doesn't bound you against overfilling your array, which is why when you only checked line != null
, you had your ArrayIndexOutOfBoundsException
. You may want to add something like this to it to be sure of that fact. Your file may only have less than 500 lines, or it may have 501 lines. This helps to guard against that; if you have less than 500 lines, the reader produces null
; if you have more, then you stop because you have nowhere else to put the data.
while(line = reader.readLine() != null && count < inits.length) {
// logic
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论