我知道变量maxreps不在我的main方法的范围内,所以我希望它通过创建一个对象来调用它,但它仍然无法获得maxreps。 我怎么能解决这个问题?
public class LUIS{
public void james(){
int current=1;
int maxreps=1;
String adriana = "aabbddddnsspkrrgg";
for(int a=0; a<adriana.length(); a++){
if(adriana.charAt(a) == adriana.charAt(a+1)){
current++;
if(maxreps>=current){
maxreps=current;
}
}
}
}
public static void main(String[] args){
LUIS fritz = new LUIS();
final int drei = fritz.james;
System.out.println(maxreps);
}
}
答案 0 :(得分:2)
如您所述,作用域阻止了查看在不同作用域中定义的变量。您可以通过返回值
来解决您的特定问题public int james(){ // <-- change from void to an int return
int current=1;
int maxreps=1;
String adriana = "aabbddddnsspkrrgg";
for(int a=0; a<adriana.length(); a++){
if(adriana.charAt(a) == adriana.charAt(a+1)){
current++;
if(maxreps>=current){
maxreps=current;
}
}
}
return maxreps; // <-- return the value
}
然后在main
方法中将变量设置为返回值。
或者,您可以将其定义为类变量,但有理由避免这样做 - 全局变量通常很糟糕。
答案 1 :(得分:2)
1)final int drei = fritz.james;
无法编译。您不能以这种方式调用方法(没有()
)。
2)此外,james()
方法应该有更有意义的名称
此方法计算同一字符的最大系列。所以,你可以称之为computeMaxSeries()
3)而是作为一种空方法,你可以返回最大系列号。
4)除此之外:
for (int a = 0; a < adriana.length(); a++) {
if (adriana.charAt(a) == adriana.charAt(a + 1)) {
将抛出StringIndexOutOfBoundsException
,因为adriana.charAt(a + 1)
指的是超出字符串长度有效限制的索引。
您应该迭代直到最后一个索引-1:
for (int a = 0; a < adriana.length()-1; a++) {
5)最后这不一致,因为您依靠maxreps
代替maxreps
来更新current
:
if(maxreps>=current){
maxreps=current;
}
你应该写:
if (current >= maxreps) {
maxreps = current;
}
所以,最后方法是:
public int computeMaxSeries(){
int current=1;
int maxreps=1;
String adriana = "aabbddddnsspkrrgg";
for(int a=0; a<adriana.length()-1; a++){
if(adriana.charAt(a) == adriana.charAt(a+1)){
current++;
if (current >= maxreps) {
maxreps = current;
}
}
}
return maxreps;
}
现在你可以做到:
final int maxreps = fritz.computeMaxSeries();
System.out.println(maxreps);