在java中关闭扫描程序时无法访问的代码?

时间:2016-10-05 21:00:15

标签: java unreachable-code

当我尝试关闭myScanner时,我在myScanner.close下面出了一条红线,告诉我它是无法访问的代码。我做错了什么?

public class crypt {    

static final char FIRST = ' ';
static final char LAST = ']';

static final int RANGE = LAST-FIRST+1;

public static void main(String[] args) {
    safe("");

}

public static boolean safe(String word) {
    Scanner myScanner = new Scanner(System.in);
    word = myScanner.nextLine();
    String upper = word.toUpperCase();
        for (int i=0; i<upper.length(); i++) {
            char c = upper.charAt(i);
                if (c < FIRST && c > LAST) {
                    return true;
                }
        }
    return false;
    myScanner.close();
} 

3 个答案:

答案 0 :(得分:0)

这一行:

void removeElemAndUpdate(char** word, int i ){
   char* arr = *word;
   printf("Length of word %d \n",strlen(arr));
   if(i==0){
      char* newarr =calloc(strlen(arr),1);
      strcpy(newarr,&arr[1]);
      printf("%s\n",newarr); 
      free(arr);
      *word=newarr;
   }else if(i>=strlen(arr)){
      printf("%d is outside the array bounds\n",i);
   }else{
      char* start = calloc(strlen(arr),1);
      char* end   = calloc(strlen(arr)-i + 1,1); 
      strncpy(start,arr,i);
      strcpy(end, &arr[i+1]);
      strcat(start,end);
      free(arr);
      printf("%s\n",start);
      free(end);
      *word=start;
   }

}

void removeElem(char* arr,int i){
   if(i==0){
      char* newarr =calloc(strlen(arr),1);
      strcpy(newarr,&arr[1]);
      printf("%s\n",newarr); 
      free(newarr);
   }else if(i>=strlen(arr)){
      printf("%d is outside the array bounds\n",i);
   }else{
      char* start = calloc(strlen(arr),1);
      char* end   = calloc(strlen(arr)-i + 1,1); 
      strncpy(start,arr,i);
      strcpy(end, &arr[i+1]);
      strcat(start,end);
      printf("%s\n",start);
      free(end);
      free(start);
   }
}

停止函数返回结果&#34; false &#34;,因此不会执行此语句后的代码。

此外,您应该在使用后关闭扫描仪,因此请先移动

return false;

语句BEFORE&#34;返回false;&#34;,并在&#34;返回true之前添加它;&#34;言。

答案 1 :(得分:0)

一旦调用了return语句,下一行就不会被执行,这会导致编译错误。

答案 2 :(得分:0)

您需要将myScanner.close();移至'return false;'之前的行。另一件需要注意的事情 - 当你返回true时你没有关闭扫描仪。您可能需要在myScanner.close();前面添加return true;

public static boolean safeToUse(String plaintext) {
    Scanner myScanner = new Scanner(System.in);
    plaintext = myScanner.nextLine();
    String upper = plaintext.toUpperCase();
        for (int i=0; i<upper.length(); i++) {
            char c = upper.charAt(i);
                if (c < FIRST && c > LAST) {
                    myScanner.close(); //Close the scanner before you return true
                    return true;
                }
        }
    myScanner.close(); //close the scanner before you return.
    return false;
} 

当你在函数内部时,return之后不会执行代码。可以认为return标记了代码中的停止点。到达此点时,它将转到调用方法/函数(在您的情况下为safeToUse())的位置。

一种跟踪和更好地理解代码执行的好方法,虽然你必须首先进行建议的修改才能使其编译。