在类外声明后访问变量的范围

时间:2017-07-27 17:36:15

标签: java variables scope

您好我有这段代码来获取字符串中最短的单词: -

import java.util.Arrays;

public class Kata {
 public static int findShort(String s) {

   int shortestLocation = null;
   String[] words = s.split("");
   int shortestLength=(words[0]).length();
   for(int i=1;i<words.length;i++){
     if ((words[i]).length() < shortestLength) {
         shortestLength=(words[i]).length();
         shortestLocation=shortestLength;
     }
   }
   int p = shortestLocation;
   return p;
 }
}

它返回错误,即变量shortestLocation无法转换为int: -

java:6: error: incompatible types: <null> cannot be converted to int
int shortestLocation = null;

我的问题是你如何访问变量的范围,就像在这种情况下我知道什么是错的。变量最短位置是在if语句的范围之外定义的,因此它只考虑初始化它的值。

如何创建它以便将初始值更改为if-statement值。这是一个范围问题,请帮助我初学者。

1 个答案:

答案 0 :(得分:0)

import java.util.Arrays;

public class Kata {
public static int findShort(String s) {

int shortestLocation = null;

这个^^行需要初始化为一个整数...不是&#39; null&#39; 0很好

String[] words = s.split("");
int shortestLength=(words[0]).length();
    for(int i=1;i<words.length;i++){

你的问题从这里开始^^你永远不会遍历所有单词,因为你停在i<words.length问题是你从i = 1开始。 for循环就像这样工作(从这里开始; 直到不满足;每次都这样做)i=words.length条件不再满足。

   if ((words[i]).length() < shortestLength) {
        shortestLength=(words[i]).length();
       shortestLocation=shortestLength;
    }

    }

 int p= shortestLocation;

无需在此初始化p ...只返回最短的位置。

 return p;
        }
  }

这样留下最终的代码

import java.util.Arrays;

public class Kata {
public static int findShort(String s) {

int shortestLocation = 0;
String[] words = s.split("");
int shortestLength=(words[0]).length();
    for(int i=0;i<words.length;i++){
      if ((words[i]).length() < shortestLength) {
        shortestLength=(words[i]).length();
        shortestLocation=shortestLength;
      }

    }

 return shortestLocation;
        }
  }

请记住,要获得一个好的&#39;结果它重点单词列表

正如评论中所指出的,初始化你原来的&#39; int p&#39;可以帮助调试。