当我尝试关闭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();
}
答案 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())的位置。
一种跟踪和更好地理解代码执行的好方法,虽然你必须首先进行建议的修改才能使其编译。