Java/Novice Compile Error in Java

From YuntechWiki

Jump to: navigation, search

Contents

不是內部或外部命令、可執行的程式或批次檔。

'java' 不是內部或外部命令、可執行的程式或批次檔。
'javac' 不是內部或外部命令、可執行的程式或批次檔。
當電腦尚未安裝JDK(Java Development Kit),及path 及 classpath 的設定尚未完成時,下javac及java指令,便會產生該錯誤訊息。
安裝JDK及設定,請參照:PLWeb環境設定

: expected

: expected
a. 簡易判斷式 … ? ... : …,在這類型判斷式中,問號之前放的是判斷式,問號與冒號之間是肯定的值,冒號之後是否定的值;而這個結構下,問號與冒號缺一不可,一但缺少冒號,即會發生此錯誤。
b. case statement的宣告最後,使用的是冒號。
int a=1;
int b=10;
switch a
{ case 1;
b = 10;
break;
case 2;
b = 20;
break;
}}
上述程式碼中,case statement的最後誤用分號,修正為冒號;注意,switch的最後若有default statement宣告時,亦用的是冒號。

';' expected

';' expected
a. 通常是statement結束後缺少分號
b. 先前的錯誤所造成的
b-1. 例:缺少運算元
System.out.println("ABCDEFG"  "123");
b-2. 例:字串未用雙引號
System.out.println(ABCDEFG);
b-3. 附近的關鍵字輸入錯誤
b-4. 先前的括號未完成

'(' expected

'(' expected
a. 程式中結構中一定會有括號的區塊,卻無撰寫。
a-1. try-catch中catch區塊缺少接收例外類型
try
{}
catch
{}
上述try-catch應修正為
try
{}
catch()
{}
a-2. if結構中,判斷式未用括號括起來。
int abc=10;
if abc==10
{}
上述程式碼中,判斷式應用括號包住,如:(abc==10)。
a-3. switch結構中,switch statement中要判斷的變數未用括號括起來。
int a=1;
int b=10;
switch a
{
case 1:
b = 10;
break;
case 2:
b = 20;
break;
}}
上述程式碼中,要判斷的變數應用括號包住,如:switch (a)。

'(' or '[' expected

'(' or '[' expected
a. 建立某些類別的實例時,語法寫錯。
Scanner scanner = new Scanner Scanner(System.in);
上述程式中,要建立新的實例時,重覆撰寫Scanner類別。
語法為:”類別” “變數名” = new “類別(參數)”;,參數根據需求可有可無。

')' expected

')' expected
a. 通常有”(”,卻無”)”搭配。
b. 先前的錯誤所造成的
b-1. 例:缺少運算元
System.out.println("ABCDEFG"  "123");
double x = 45;
if ((x % 9 == 0)(x % 5 == 0))
System.out.println("Yes");
else
System.out.println("No");
}
上述程式碼在if statement中,有兩個判斷式,少了邏輯運算元&&(and)或||(or)
b-2. 例:字串未用雙引號
System.out.println(ABCDEFG);
b-3. 運算元使用錯誤,例如:取餘數是使用”%”而不是”mod”。
c. 程式中結構中一定會有括號的區塊,卻無撰寫。
c-1. try-catch中catch區塊缺少接收例外類型
try
{}
catch
{}
上述try-catch應修正為
try
{}
catch()
{}

']' expected

']' expected
a. 陣列宣告語法錯誤時,即為發生。
int arr[10];
上述程式碼是宣告int陣列,但語法錯誤,正確語法如下。
int arr[]=new int[10];
int[] arr=new int[10];

'{' expected

'{' expected
a. 誤將interface的繼承寫錯
誤將
interface  bbb  extend  aaa{}
寫成
interface  bbb  implements  aaa{}
b. 撰寫switch-case時,在switch statement後直接寫分號或無以”{“、”}”表示switch區塊。
switch (c);{}
將其多餘的分號刪除。
c. 類別或介面名稱中,內含java有意義的符號,如”.”、”(“、”/”…等。
public class main_class.java {
public static void main (String[] args) {

}
}
上述程式碼中,誤將”.”撰寫成類別名稱;注意main方法所屬的類別名稱與檔名相同,但不包含副檔名。
d. switch statement語法錯誤。
e. 誤寫有參數的類別宣告
public class class_name(type t1) {}
刪除參數宣告。

'}' expected

'}' expected
a. 在類別的最後忘記撰寫”}”。
b. 不小心將”}”給注解了起來。
c. 撰寫出多餘的”{“。
修正方式:刪除多餘的”{“

'.' expected

'.' expected
a. 程式缺少撰寫”.”
import java util.*;
上述程式碼中在java與util之間少了”.”。

'.class' expected

'.class' expected
a. 在呼叫方法的時候,給予參數的同時,誤將型態也撰寫在其中。
public static void main (String[] args) {
System.out.println(call_one(int abc));
}
public static int call_one(int a)
{

}
方法呼叫給予的參數是不需要給予型態宣告。注意到只有在方法的head宣告以及在方法呼叫之前,要傳送的參數應該已宣告型態完成。
b. 你撰寫一個int i,其實原本意指普通的i而己。

'class' or 'interface' expected

'class' or 'interface' expected
a. 在程式碼最後撰寫多餘的”}”
b. 撰寫類別或介面的時候,少寫了”class”與”interface”關鍵字
public java_e_t {
public static void main (String[] args) {

}
}

'else' without 'if'

'else' without 'if'
a. 先前的錯誤所造成的
a-1. 例:if條件式中有語法錯誤
int x=45;
if ((x % 5 == 0)and(x % 9 == 0))
System.out.println("Yes")
else
System.out.println("No");
上述程式,因為在條件判斷中,有語法錯誤,造成else無法判讀
a-2. 先前的括號未完成
int x=45;
if ((x % 5 == 0)||(x % 9 == 0))
{System.out.println("Yes")
else
System.out.println("No");
上述程式,因為在條件成立執行區塊的括號不對稱,造成else無法判讀。

'try' without 'catch' or 'finally'

'try' without 'catch' or 'finally'
a. 撰寫try程式碼的時候,少了配套的catch或finally的程式碼區塊。try最少會搭配一組catch的區塊程式,因為當收集到例外狀況時,就需要catch處理收集到的例外。
a-1. 有其他程式碼夾在try-catch程式區塊之間
try { 
int num_1;
BufferedReader read_data = new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸入數值: ");
num_1 = Integer.parseInt(read_data.readLine());
System.out.println(num_1);
}
Int num_2;
catch(IOException e) { System.out.println("I/O發生了錯誤"); }
catch(NumberFormatException e) { System.out.println("數值輸入格式有錯誤");}
上述程式碼中,try-catch區塊夾了變數宣告。

'void' type not allowed here

'void' type not allowed here
a. 方法宣告的回傳型態是不回傳(void),但在方法裡中卻有return statement
public static void main (String[] args) {
System.out.println(print_num());
}
public static void print_num(){
int num_1=123;
return num_t;
}
上述程式碼中,在print_num()方法中,有return statement,而在方法的宣告卻是void
根據需求修正:
a-1. Print_num()方法是不需要回傳的,刪除return statement。
a-2. Print_num()方法是需要回傳的,修正回傳型態為正確型態,如上述程式碼為int。

<identifier> expected

<identifier> expected
a 方法的head,在參數部份,有部份參數未給予型態。
public static void main (String[] args) {
rev(“ab”,”bc”);
}
public static String rev(String str,strii){
return str+strii;
}
將方法的head修正為public static String rev(String str, String strii)
b 程式中有多餘的文字。
Scanner aa = new.Scanner(System.in);
上述程式碼中,關鍵字new被用”.”連接在一起,造成編譯器無法判讀。
c. 方法的關鍵字順序寫錯
public void static main (String[] args) {

}
上述程式中void與static順序寫反。
方法格式:”權限” “static or non-static” “回傳型態” “方法名稱(參數)”{}

> expected

> expected
a. 通常有”<”,卻無”>”搭配。
b. 先前的錯誤所造成的

(class name) is already defined in unnamed package

(class name) is already defined in unnamed package
a. 在同一個package下,有重覆的類別名稱被宣告出來。

(method name) in (class name) cannot be applied to (types)

(method name) in (class name) cannot be applied to (types)
a. 在方法呼叫時,將資料分派給參數時,資料的型態與參數的型態不一致。
public static void main (String[] args) {
System.out.println(rev(123));
}
public static String rev(String str){
return str;
}
上述程式碼在呼叫方法rev時,將字串參數給予非字串的資料時,就會發生該錯誤,反之將數值參數給予非數值的值時亦會發生。

(method name) is already defined in (class name)

(method name) is already defined in (class name)
a. 在同一個類別下,有重覆的方法名稱被宣告出來。
public class java_test {
public static void print_num(){

}
public static void print_num(){

}
}
上述程式碼中,有重覆方法名稱print_num()。
但是有相同名稱的方法下,給予參數個數與型態不同,就不是重覆方法名稱,如下述程式碼。
public class java_test {
public static void print_num(){

}
public static void print_num(int a){

}
public static void print_num(double a){

}
public static void print_num(int a, double b){

}
}

(type) cannot be dereferenced

(type) cannot be dereferenced
a. 通常是primitive type的變數所引起的,使用該型態不存在的方法,通常會誤用到String或Object的方法。
例如:
a-1. char使用String的方法
char aa='a';
System.out.println(aa.charAt());
a-2. int轉換成String時,使用到Object的方法
int aa=1;
System.out.println(aa.toString());
上述程式中,轉換int可以使用Integer.toString(aa)的方式。

(variable name) has private access in (class name)

(variable name) has private access in (class name)
a. 當變數被宣告成private的時候,不能從所屬類別以外的類別直接存取該變數。

(variable name) is already defined in (class name)

(variable name) is already defined in (class name)
a. 在同一個方法中,有重覆的變數名稱被宣告出來。
a-1.
public static void print_num(){
int a;
double a;
}
上述程式碼中,已經有重覆變數名稱a。
a-2.
public static void print_num(int a){
double a;
}
上述程式碼中,雖然在方法區塊中沒有重覆變數名稱a,但是在參數已經宣告數值變數a,所以變數名稱a發生重覆。

(variable name) is already defined in (method name)

(variable name) is already defined in (method name)
例:
kg_1 is already defined
a.在同一method中,已經宣告過kg_1變數
b.在同一class中,已經宣告過kg_1變數
注意:在同一class中,若kg_1分別宣在method中與class中,是不會有錯誤發生,因為分別屬於類別的變數與方法的變數。

array required, but (type) found

array required, but (type) found
a 一般非陣列的變數,被當成陣列變數使用。
int abc;
System.out.print(abc[1]);
上述程式中,abc變數為非陣列變數,但被當成陣列變數使用;修正方法,根據需求建立變數是否為陣列變數。

break outside switch or loop

break outside switch or loop
a. break只能撰寫在迴圈區塊與switch中,發生此錯誤時,即有break statement寫在迴圈或switch區塊外面。
for (int i=0; i<10 ;i++)
if (i<5)
System.out.println(i);
break;
上述程式中,for迴圈沒有用”{…}”包住程式區塊,所以只有for下一句程式結構進入迴圈,而break;不在迴圈區塊,發生了此類錯誤。
修正方法,使用”{…}”包住迴圈程式區塊,亦或這題是if statement少了else的部份。

cannot find symbol

cannot find symbol
a. 變數(方法)尚未宣告。
public class java_e_t {
public static void main (String[] args) {
n=5;
}}
上面程式碼中,未宣告變數n。
public class java_e_t {
public static void main (String[] args) {
System.out.println(abc());
}}
上面程式碼中,未宣告方法abc。
b. 打字錯誤,symbol是有缺分大小寫的。
c. string宣告應為String
Java的字串類別當中,是使用大寫S開頭命名。
d. 尚未import java的封裝參照
例:
public class java_e_t {
public static void main (String[] args) {
Scanner sc = new Scanner(System.in);
}}
上面程式碼中,少了import java.util.*;
e. 變數宣告在無法呼叫到的範圍中。
例:
public class java_e_t {
public static void main (String[] args) {
for(int i=1;i<10;i++)
{
int j=i+j;
}
System.out.println(j);
}}
上面程式碼中,變數j的scope在for的迴圈中,所以迴圈外看不到j
f. 該類別(實例)無相關的類別(實例)方法
例:
public class java_e_t {
public static void main (String[] args) {
System.out.println(java_class.abc());
}}
public class java_class {
public String abc () {
return “abc”;
}}
上面程式碼中,呼叫java_class類別中的abc方法,abc方法不是類別方法。
g. 參數個數缺少、多餘及順序錯誤。

cannot return a value from method whose result type is void

cannot return a value from method whose result type is void
a. 當方法被宣告成不需要回傳的”void”時,在方法裡不應該會有return的敘述句。
public static void kk()
{
return "hello java";
}
根據需求及程式碼,檢查該方法是否需要回傳值並宣告方法回傳型態或不需要回傳敘述句。

case, default, or '}' expected

case, default, or '}' expected
a. switch條件式中,變數不可以在參數中宣告
switch(int num){
case '1':
System.out.println("1");
break;
default:
System.out.println("2");
}
上述程式在switch參數中宣告變數num,變數應提出在外面宣告。

class (class name) public, should be declared in a file named (file name)

class (class name) public, should be declared in a file named (file name)
a. 檔名與class name不一致,也有狀況為main method宣告於錯誤的class。
例:檔名是Convet.java
public class Good{
public static void main (String[] args) {
System.out.println(“good”);
}}
錯誤訊息就會如下:
Convert.java:1: class Good is public, should be declared in a file named Good.java
public class Good {
檔名為Convert,而main method所在的class name為good

class, interface, or enum expected

class, interface, or enum expected
任何變數及method的宣告使用,需在class、interface、enum裡宣告。

constant expression required

constant expression required
a. switch-case中,每一個case statement都是常數,若放的是變數,就會產生錯誤。
int x = keyboard.nextInt();
static Scanner keyboard = new Scanner(System.in);
switch (x) {
case x:
System.out.println("You entered x");
break;
case y:
System.out.println("You entered y");
break;
default:
System.out.println("You entered something else.");
}
上述程式碼中,case statement誤放了變數x、y,原意應該是要放’x’、’y’字元。

continue outside of loop

continue outside of loop
a. continue只能撰寫在迴圈區塊中,發生此錯誤時,即有continue statement寫在迴圈區塊外面。

duplicate case label

duplicate case label
a. switch-case中,每一個case statement都是獨一無二不會有重覆的。
int x = keyboard.nextInt();
static Scanner keyboard = new Scanner(System.in);
switch (x) {
case 'y':

break;
case 'y':

break;
default:
System.out.println("You entered something else.");
}
上述程式碼中,case statement重覆'y',合併兩個case statement。

duplicate class: (class name)

duplicate class: (class name)
a. 程式碼中,有重覆的類別的名稱被宣告出來。

error: Class names, 'EnglishExam', are only accepted if annotation processing is explicitly requested

>javac EnglishExam
error: Class names, 'EnglishExam', are only accepted if annotation processing is explicitly requested
1 error
執行Java 的編譯器(compiler),需要編譯的檔案,需要指定該檔案的檔名及副檔名(.java),執行完成後,會在其目錄產生一個EnglishExam.class 的 byte code 檔。

Exception in thread "main" java.lang.NoClassDefFoundError: EnglishExam

>java EnglishExam
Exception in thread "main" java.lang.NoClassDefFoundError: EnglishExam
>java EnglishExam.java
Exception in thread "main" java.lang.NoClassDefFoundError: EnglishExam
當程式檔未經過編譯時,尚未產生.Class檔,執行程式時,便產生錯誤訊息;必須要先經過編譯後,產生.Class檔,才能順利執行。

Exception in thread "main" java.lang.NoSuchMethodError: main

Exception in thread "main" java.lang.NoSuchMethodError: main
檢查與檔名相同的類別中,是否有main method,或者撰寫錯誤。

illegal escape character

illegal escape character
a. “\”在Java的字串中是有特別意義的。
a-1.
String path_dir = “c:\abc\def”;
上述的程式碼中,因為”\”是字串中,某些參數宣告,路徑應用重覆”\”表示一個”\”,如:String path_dir = “c:\abc\def”;
a-2. “\””代表雙引號這個字,”\n”代表換行。”\”在字串中,有參數宣告的意味在。

illegal start of expression

illegal start of expression
a. 靜態變數被宣告於方法內
public class java_e_t {
public static void kk()
{
static int aa=100;
}
}
靜態變數的宣告,需在類別中及方法外面宣告,上述aa數值變數,應於在kk方法之外宣告。
b. switch條件式中的case寫錯。
case : '1'
應於在case後放選項再加上冒號,如:case '1' :
c. 誤寫了巢狀方法
public static void kk()
{ public static void kk2()
{
}
}
方法中不應包含第二個方法,上述程式,需將kk2()方法提出到kk()方法外面。

illegal start of type

illegal start of type
a. 方法的參數型態宣告成void。
public static int call_method (void a)
{

}
上述方法中參數型態宣告成”void”,無任變數的型態是void,所以發生錯誤。
b. 程式碼中有多餘的”)”

incomparable types: (type1) and (type2)

incomparable types: (type1) and (type2)
a. 在進行判斷比對時,給予兩個相互比較不同型態的值或變數。
int a=1;
String b=1;
if(a==b)
{
System.out.print(true);
}
else
{
System.out.print(false);
}
上述程式碼中,將數值(int)與字串(string)比對,結果無法比對。

incompatible types

incompatible types
found  : (Type)
required: (Type)
a. 將資料分派給變數時,資料的型態與變數的型態不一致。
int i="!@#";
將數值變數給予字串的值時,就會發生該錯誤,反之將字串變數給予數值的值亦會發生。

inconvertible types

inconvertible types
found  : (type a)
required: (type b)
a. 將資料轉換時,無法將type a轉換成type b,通常隱含轉換時發生。
String a="A";
int b= (int)a;
上述程式中,隱含轉換無法將String轉成int,可以透過Integer.parseInt()的方法,將String轉換成數值。
a-1. 透過隱含轉換將數值轉換成字串,也會發生這樣的問題。

inner classes cannot have static declarations

inner classes cannot have static declarations
a. 巢狀類別是很少有的寫法,在寫巢狀類別時,裡層的類別不會有靜態宣告,包括靜態變數、靜態方法。
b. 誤將外層的類別寫成巢狀類別。

invalid method declaration; return type required

invalid method declaration; return type required
a. method宣告中,未宣告回傳值型態
public static main(String[] args)
method的宣告中,一定會宣告回傳型態,即使不回傳,也需宣告”void”。

malformed floating point literal

malformed floating point literal
a. 輸入重覆兩個”..”
System.out..println(123);
上述程式中,重覆輸入了兩個”.”符號。
b. float數值宣告錯誤。
float aa= 1e;
宣告float數值時,字尾以『f』表示,若使用其他文字,即會發生此錯誤。

missing method body, or declare abstract

missing method body, or declare abstract
a. 方法的head缺少body的部份,也就是只有方法的宣告,沒有程式碼區塊部份,只能用於宣告抽像方法。
b. 在方法的head與body的第一個”{”之間多了分號。
public static void print_num();{

}
去除該分號
c. 該方法是抽像方法,少輸入abstract關鍵字。而抽像方法不存在body的部份。

missing return statement

missing return statement
a. 當方法宣告回傳型態只要不是void,那麼都需要有return statement。
public static String kk()
{
int a=10;
if(a>5)
{
return "yes";
}
}
上述程式碼雖有return statement,但重點在於不只是否有return statement,而是確保該方法一定可以結束於某句return statement,所以上述方法未考慮到當如果a小於5 的時候情況。
a-1. 有的時候會將return statement放在switch、for、while之中,容易忽略是否所有情況是否結束於return statement中。

missing return value

missing return value
a. 未撰寫欲回傳的資料值,在return關鍵字之後就是分號
return ;
根據需求,將要回傳的值或方法撰寫進去。

modifier private not allowed here

modifier private not allowed here
a. 該錯誤通常會指向某public、protected與private關鍵字撰寫錯位子或不允許使用較高權限的關鍵字,請將權限等級降低。

modifier static not allowed here

modifier static not allowed here
a. 該錯誤通常會指向某static關鍵字是多寫與撰寫錯位子

non-static method (method name) cannot be referenced from a static context

non-static method (method name) cannot be referenced from a static context
a. 實例方法需要被產生成物件,才能被為使用
public class main_clase {
public static void main (String[] args) {
System.out.println(second_class.print());
}
}
class second_class
{
public void print_123()
{
System.out.println(123);
}
}
上述程式碼中,在second_class類別中,由於print_123()方法未做static的宣告,是屬於實例方法
根據需求有兩種方法修正些錯誤:
a-1. 將print_123()更正為類別方法,在前面增加static宣告。
a-2. 產生second_class的物件,透過該物件去呼叫print_123()。
其他類似的錯誤
public class main_clase {
 
public static void main (String[] args) {
System.out.println(print_123);
}
public void print_123()
{
System.out.println(123);
}
}
上述程式中,雖然print_123()與該方法的呼叫屬於同一方法,但是仍是實例變數。

non-static variable (variable name) cannot be referenced from a static context

non-static variable (variable name) cannot be referenced from a static context
a. 實例變數需要被產生成物件,才能被為使用
public class main_class {
public static void main (String[] args) {
System.out.println(second_class.num_1);
}
}
class second_class
{
int num_1=0;
}
上述程式碼中,在second_class類別中,由於num_1變數未做static的宣告,是屬於實例變數
根據需求有兩種方法修正些錯誤:
a-1. 將num_1更正為類別變數,在前面增加static宣告。
a-2. 產生second_class的物件,透過該物件去存取num_1。
其他類似的錯誤
public class main_clase {
int num_2=0;
public static void main (String[] args) {
System.out.println(num_2);
}
}
上述程式中,雖然num_2與該變數的呼叫屬於同一方法,但是仍是實例變數。

not a statement

not a statement
a.在設定變數時,使用’==’,
如:
int a;
a == 1+2;
b: 程式敘述句通常會以關鍵字或變數開始撰寫,撰寫卻使用常數如:數值、字串,使用標點符號等字元。

operator (operator name) cannot be applied to (type1,type2)

operator (operator name) cannot be applied to (type1,type2)
a. 執行運算元時,給予資料的型態不一致
System.out.println("123"+123);
字串可以與字串相加,數值也可以與數值相加,而字串與數值無法相加。
b. 該資料型態無法執行該運算元
System.out.println("123"*"123");
字串無法執行乘法運算元。

orphaned case

orphaned case
a. 在撰寫switch-case的時候,未將case寫在switch區塊中。
int a=1;
int b=0;
switch(a)
{
case 1:
b = 10;
}
case 2:
b = 12;
上述程式中,誤將switch區塊提早關閉,使case 2未在switch區塊之中,修正switch-case程式區塊,確認將所有的case包括在其中。

package (package name) does not exist

package (package name) does not exist
a. 使用System封裝時,使用的是大寫S
system.out.println("hello java”);
修改為:System.out.println("hello java”);
b. import相關的封裝
import java.until.*;

possible loss of precision

possible loss of precision
a. 高位元的資料值或變數,分派給予較低位的變數,就會發生這樣的情況
double d1=1.2;
int i1=d1;
將高位元的資料值或變數,轉換至低位元;若程式需求不需要到那麼精準,可以考慮使用較低的位元。
a-1. 在float與double的轉換上亦要注意

reached end of file while parsing

reached end of file while parsing
a. 所有的大括號都是一對的,有一個”{”,就會有另一”}”,當不對稱的時候就會發生這個錯誤訊息。

repeated modifier

repeated modifier
a. 重覆宣告public或final的關鍵字
public public static int call_one()
{

}
上述程式中的方法,重覆使用PUBLIC關鍵字,刪除一個即完成修改。
public public class java_e_t { 

}
上述程式中的類別,重覆使用PUBLIC關鍵字,刪除一個即完成修改。

unclosed character literal

unclosed character literal
a. 字元尚為被單引號包含。
System.out.println('a);
上述程式碼,a字元少了第二個” '”
a-1. 檢查當使用”\”消去雙引號的保留字時,如”\'”,所有單引號的各數。
a-2. 注意使用的是直的單引號『'』,當從word或網頁復製時,有可能是斜的雙引號『’、 ‘』

unclosed comment

unclosed comment
a. 註解時,未將註解完全
/* System.out.println(123);
上敘程式中,未將註解/* */完整,少了『*/』定義註解結束。
a-1. 注意到,註解過程中,可能包含其他註解,造成註解提早結束,或未註解完全。

unclosed string literal

unclosed string literal
a. 字串尚為被雙引號包含。
System.out.println("123);
上述程式碼,123字串少了第二個” "”
a-1. 檢查當使用”\”消去雙引號的保留字時,如”\"”,所有雙引號的各數。
a-2. 注意使用的是兩個直的雙引號『"』,當從word或網頁復製時,有可能是斜的雙引號『”、 “』

unexpected type

unexpected type
a. 判斷式中內含運算時,在判斷的過程中,誤用”=”去取代關係運算子”==”
int num = 1;

if ((num - 1)=0)
上述判斷式,應使用關係運算子”==”。

unreachable statement

unreachable statement
a. continue,在迴圈中,透過continue statement中,立即下一回合迴圈,與continue statement同一區塊之後的程式,不會發生執行。
for (int i=0; i<10 ;i++)
{
continue;
System.out.println(i);
}
修正方法,將continue statement之後的程式碼,移至continue statement之前。
a-1. 注意到下方程式中,雖然continue statement之後有程式碼,但與continue statement同一區塊是無程式碼的。
for (int i=0; i<10 ;i++)
{
If (i<5)
continue;
else
System.out.println(i);
}
b. break,在迴圈、switch中,透過break statement中,跳出迴圈、switch,與break statement同一區塊之後的程式,不會發生執行。
int a=1;
int b=10;
switch(a)
{ case 1:
break;
b = 10;
}}
修正方法,將break statement之後的程式碼,移至break statement之前。
c. try-catch,在try-catch中丟出例外,即會跳出try區塊程式,與throw statement同一區塊之後的程式,不會發生執行。
try {
throw new Exception();
int i=0;
}
catch(Exception e) {System.out.println("有錯誤發生!!!"); }
修正方法,將throw statement之後的程式碼,移至throw statement之前。
d. return,方法透過return statement離開方法,並將資料回傳給該方法的呼叫,與return statement同一區塊之後的程式,不會發生執行。
public static void main (String[] args) {
System.out.println(call_one());
}
public static int call_one()
{
return 1;
System.out.println(1);
}
修正方法,將return statement之後的程式碼,移至return statement之前。

unreported exception (exception name); must be caught or declared to be thrown

unreported exception (exception name); must be caught or declared to be thrown
a. 這段程式碼中,隱含著會產生的例外狀況。
a-1. 必需使用try-catch的程式結構,處理可能的隱含例外。

int num_1;
BufferedReader read_data = new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸入數值: ");
Num_1 = Integer.parseInt(read_data.readLine());
System.out.println(num_1);
上述程式碼中,因為在BufferedReader的物件執行讀取資料時,會有隱含的例外狀況發生,如數值格式錯誤。
修正程式如下,可以透過try-catch的方式處理例外狀況

try {
int num_1;
BufferedReader read_data = new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸入數值: ");
Num_1 = Integer.parseInt(read_data.readLine());
System.out.println(num_1);
}
catch(IOException e) { System.out.println("I/O發生了錯誤"); }
catch(NumberFormatException e) { System.out.println("數值輸入格式有錯誤");}
a-2. 在該段程式碼所屬的方法的head撰寫丟出宣告,讓呼叫該方法的程式碼處理例外狀況。
public static void main (String[] args) {

Input_num();

}
Public static void input_num()throws Exception{

int num_1;
BufferedReader read_data = new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸入數值: ");
Num_1 = Integer.parseInt(read_data.readLine());
System.out.println(num_1);

}
上述程式碼中,因為在BufferedReader的物件執行讀取資料時,會有隱含的例外狀況發生,如數值格式錯誤。
修正程式如下,可以透過try-catch的方式處理例外狀況
public static void main (String[] args) {

try {
Input_num();
}
catch(IOException e) { System.out.println("I/O發生了錯誤"); }
catch(NumberFormatException e) { System.out.println("數值輸入格式有錯誤");}
catch(Exception e) {System.out.println("有錯誤發生!!!"); }

}
Public static void input_num()throws Exception{

int num_1;
BufferedReader read_data = new BufferedReader(new InputStreamReader(System.in));
System.out.print("請輸入數值: ");
Num_1 = Integer.parseInt(read_data.readLine());
System.out.println(num_1);

}

variable (variable name) might not have been initialized

variable (variable name) might not have been initialized
a. 變數宣告的同時,需要將變數初始化,如int i=1; String s=“JAVA”;,若無值給予時,可以給予0或空值,如int i=0; String s= "";

while expected

while expected
a. 通常在do-while迴圈中,do區塊之後沒有while判斷式,即會發生此錯誤。
b. do區塊中程式碼發生錯誤,導致讀不到之後的while判斷式,發生錯誤誤判。
Personal tools