Java 表达式字符串的开头非法
我正在尝试制作一个程序来反转文件中的文本行。我仍在学习java,对此我是新手。我的程序出错了,因为我在循环内部创建了一个变量,并试图在外部访问它。在声明字符串变量之前,我尝试添加preffix“public”,但当我尝试编译它时,它指向“public”,并表示表达式的开头非法。有人能告诉我为什么这是错误的,或如何修复它Java 表达式字符串的开头非法,java,Java,我正在尝试制作一个程序来反转文件中的文本行。我仍在学习java,对此我是新手。我的程序出错了,因为我在循环内部创建了一个变量,并试图在外部访问它。在声明字符串变量之前,我尝试添加preffix“public”,但当我尝试编译它时,它指向“public”,并表示表达式的开头非法。有人能告诉我为什么这是错误的,或如何修复它 import java.io.*; import java.util.*; public class FileReverser { p
import java.io.*;
import java.util.*;
public class FileReverser
{
public static void main(String[] args)
throws FileNotFoundException
{
Scanner console = new Scanner(System.in);
System.out.print("File to Reverse: ");
String inputFileName = console.next();
System.out.print("Output File: ");
String outputFileName = console.next();
FileReader reader = new FileReader(inputFileName);
Scanner in = new Scanner(reader);
PrintWriter out = new PrintWriter(outputFileName);
int number = 0;
while (in.hasNextLine())
{
String line = in.nextLine();
public String[] lines;
lines[number] = line;
number++;
}
int subtract = 0;
for (int i;i>lines.length;i++)
{
out.println(lines[(lines.length-subtract)]);
subtract++;
}
out.close();
}
}
这是一个范围问题<代码>行应该在while循环之外声明。通过在while循环中放置
行
,它仅在该循环中可用。如果将其移到外部,行的范围将在main方法中
变量的作用域是程序中可以访问变量的部分
这是伯克利一堂课上关于变量和范围的课堂讲稿。如果你有时间的话,读一读。
问题:
- 您正在使用
public
修饰符声明行
,该修饰符仅用于实例/静态变量,而不是局部变量
- 您从未初始化
行
- 您试图在其范围之外使用
行
(当前是while
循环)
- 您试图在不初始化的情况下使用
i
,此处:
for (int i;i>lines.length;i++)
- 如果
条件是错误的,那么您的;当i
小于行时,您可能希望继续。长度
subtract
最初为0,因此访问行[lines.length-subtract]
将引发异常(因为它在数组的边界之外)
您可以使用以下代码修复这些问题:
// See note later
String[] lines = new String[1000];
while (in.hasNextLine()) {
String line = in.nextLine();
lines[number] = line;
number++;
}
// Get rid of subtract entirely... and only start off at "number"
// rather than lines.length, as there'll be a bunch of null elements
for (int i = number - 1; i >= 0; i--) {
out.println(lines[i]);
}
现在,这将适用于多达1000行,但这是一个痛苦的限制。最好只使用列表
:
List line=new ArrayList();
while(在.hasNextLine()中){
line.add(in.nextLine());
}
然后您需要使用size()
而不是length
,并使用get
而不是数组索引器来访问这些值-但在我看来,这会更干净。访问修饰符(public
,private
,protected
)仅适用于类成员(方法或字段)
如果要访问受{
和}
限制的范围之外的变量,这意味着您在错误的范围内定义了变量。例如,如果在内部定义了循环和变量x
,然后希望在循环外部使用它:
for (int i = 0; i < 10; i++) {
.....
int x = 6;
.....
}
int y = x; // compilation error
int x = 0;
for (int i = 0; i < 10; i++) {
.....
x = 6;
.....
}
int y = x; // not variable is available here
for(int i=0;i<10;i++){
.....
int x=6;
.....
}
int y=x;//编译错误
。。。实际上,您希望在循环之前定义此变量:
for (int i = 0; i < 10; i++) {
.....
int x = 6;
.....
}
int y = x; // compilation error
int x = 0;
for (int i = 0; i < 10; i++) {
.....
x = 6;
.....
}
int y = x; // not variable is available here
intx=0;
对于(int i=0;i<10;i++){
.....
x=6;
.....
}
int y=x;//此处没有可用的变量
首先要修复的是缩进。正确缩进的代码使一切都更容易理解。各位,请不要对此投反对票。。。他有一个真正的问题,如果其他人偶然发现这个问题,我们可以避免类似的问题。@AnanthaSharma nice thinking希望其他用户也像你一样思考。