IF文の記述で、「else if」と書く箇所が単に「else」となっているミスがあります。
[NG例][Java]
public class Program {
public static void main (String[] args) {
int a = 0;
if (a == 0) {

// elseの右側に記述するifが抜けている。
} else (a == 1) {

}
}
}


[OK例][Java]
public class Program {
public static void main (String[] args) {
int a = 0;
if (a == 0) {

} else if (a == 1) {

}
}
}

単純なミスですが、コンパイルエラーは些細な記述ミスから発生する場合が見受けられます。

にほんブログ村 IT技術ブログへ
にほんブログ村
メソッドの記述で、同一ブロック内に同じ名前の変数を宣言すると、コンパイルエラーとなります。
[NG例][Java]
public class Program {
public static void main(String[] args) {
int a = 10;
int b = 20;
// 変数aは、すでに宣言されているので重複して宣言できない。
int a = 30;
}
}

上記のような短いコード内ではミスは発生しにくいのですが、メソッド内の処理が長いと知らず知らずのうちに重複使用してしまうことがあります。

にほんブログ村 IT技術ブログへ
にほんブログ村
文字列にエスケープシーケンスと呼ばれる特殊文字を使用するのを忘れていると、コンパイルエラーが発生します。

Javaを例に説明しますと、コンソールに
"Hello."

と出力する場合に、以下のソースではコンパイルエラーとなります。
[NG例][Java]
public class Program {
public static void main(String[] args) {
System.out.println(""Hello!"");
}
}

次のように「\」を使用して「\"」のようにエスケープしてください。
[OK例][Java]
public class Program {
public static void main(String[] args) {
System.out.println("\"Hello!\"");
}
}


にほんブログ村 IT技術ブログへ
にほんブログ村
privateな変数やメソッドは、クラス内でしか呼び出せません。
別のクラスから呼び出した場合は、コンパイル時に可視エラーが発生します。

[NG例][Java]
public class Program {
public static void main(String[] args) {
Sample sample = new Sample();
sample.print();
}
}

public class Sample {
private void print() {
System.out.println("Hello.");
}
}


可視エラーは、コンパイル時にエラーの場所を教えてくれるコンパイラが多いので、解決するのが比較的易しいバグです。

にほんブログ村 IT技術ブログへ
にほんブログ村
異なる型の代入や演算を行うと、型の不一致によりコンパイルエラーとなります。
これは、強い型付けを持つ言語ではキャストが義務付けられていることから起こります。
[NG例][Java]
public class Program {
public static void main(String[] args) {
long a = 10;
// キャストせずに代入したため、コンパイルエラーとなる。
int b = a;
}
}

[OK例][Java]
public class Program {
public static void main(String[] args) {
long a = 10;
// キャストすれば代入できる。
int b = (int)a;
}
}


異なる型同士の演算や代入では、キャストを忘れずに行うようにしてください。

にほんブログ村 IT技術ブログへ
にほんブログ村
Java、C#、C言語では、IF文の条件式に使用する比較演算子として「==」がよく使われます。
たとえば「a == b」の記述は、「aとbが同じかどうか」という意味です。
「a == b」を誤って「a = b」と記述するとコンパイルエラーとなります。
[NG例][Java]
public class Program {
public static void main(String[] args) {
int a = 10;
// 「==」ではなく「=」になっている。
if (a = 10) {
System.out.println("10です。");
}
else {
System.out.println("10ではありません。");
}
}
}

VBでは比較演算子は「==」ではなくて「=」となりますので、言語による構文の違いには注意してください。

にほんブログ村 IT技術ブログへ
にほんブログ村
プログラムの中に全角文字が混ざってしまう場合があります。
たとえば、「;」→「;」、「{」→「{」、「"」→「”」、「int」→「int」といった具合です。
コードブロックや文末記号、予約語などが全角文字になっているとコンパイルエラーとなります。
見た目が半角文字と似ているため、紛れ込むと厄介です。
[NG例][Java]
public class Program {
public static void main(String[] args) {
// 「;」が全角文字になっている。
System.out.println("Hello World!")
}
}

特に注意が必要なのが全角スペースです。(著者は全角スペースに泣かされたことが何度かあります)
Javaでは全角スペースがコード中に入っているとコンパイルエラーとなります。
通常のテキストエディタからでは、見た目で判断できないため要注意です。
(Eclipseでは全角スペースは□と表示されるので判別可能)
ちなみにC#とVBにおいては、全角スペースは、余白として認識されるので、コンパイルエラーとはなりません。

にほんブログ村 IT技術ブログへ
にほんブログ村
予約語を変数名に使用することはできません。
コンパイルエラーとなります。
[NG例][Java]
public class Program {
public static void main(String[] args) {
// finalは予約語として定義されているので変数名には使用できない。
int final = 10;
}
}

プログラミングに慣れてくると予約語を変数名に使用するといったミスはなくなりますが、初心者は知らず知らずのうちに予約語を変数名に使用してしまうことがありますので注意してください。

にほんブログ村 IT技術ブログへ
にほんブログ村
プログラミング言語の仕様によっては、大文字と小文字を区別している場合があります。
VBの場合は大文字と小文字は区別されませんが、Java、C#、Cの場合は区別されます。

[NG例][Java]
public class Program {
public static void main(String[] args) {
System.Out.println("Hello World!");
}
}

[OK例][Java]
public class Program {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

特に、VBを習得した人がJavaやC#を新たに習得する場合は注意が必要です。
大文字と小文字の違いには十分に意識してプログラミングするようにしてください。

にほんブログ村 IT技術ブログへ
にほんブログ村
コーディングを急ぎすぎたりすると、予約後や変数の綴りを間違えるときがあります。
よくあるのが、単語の文字が入れ替わっているパターンです。
また、「rとl」「aとe」「iとe」などの書き間違いなどのパターンも多く見受けられます。
[NG例][Java]
public class Program {
public static void main(String[] args) {
// iとrが入れ替わっている。
System.out.pirntln("Hello World!");
}
}

[OK例][Java]
public class Program {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

EclipseやVisual Studioをはじめとする開発環境では、Control-Spaceを押したときに候補となるリストを表示してくれるアシスト機能がありますので、このような補完機能を利用することによってミスは防げると思います。
ソースコードは綴り間違いを起こさないように、正確に記述しましょう。

にほんブログ村 IT技術ブログへ
にほんブログ村