import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int i, j;
for (i = 1; i <= 2 * n - 1; i++) { // 첫 번째 줄, 두 번째 줄 ...
if (i == 1 || i == (n + (n - 1))) { // 첫 번째 줄과 마지막 줄, 즉 천장과 바닥
for (j = 1; j <= n; j++) {
bw.write("*");
}
for (j = 1; j <= (n - 1) + (n - 2); j++) { // 테두리 바깥 공백
bw.write(" ");
}
for (j = 1; j <= n; j++) {
bw.write("*");
}
}
else { // 그 외, 기둥을 만드는 부분
if (i < n) {
for (j = 1; j <= i - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= (n - 1) + (n - 2) - 2 * (i - 1); j++) { // 테두리 바깥 공백
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
if (i > n) {
for (j = 1; j <= n - (i % n) - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= 2 * (i % n) - 1; j++) { // 테두리 바깥 공백
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
else {
for (j = 1; j <= i - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
}
bw.write("\n");
}
bw.flush();
}
}

...
X 모양은 참 잘 보이는데
옆에 이상한 것도 참 잘 보이네요?
저기에 별이 왜 또 찍혔을까요..

그래서 이만큼 고쳐서 다시 시도해 보았습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int i, j;
for (i = 1; i <= 2 * n - 1; i++) { // 첫 번째 줄, 두 번째 줄 ...
if (i == 1 || i == (n + (n - 1))) { // 첫 번째 줄과 마지막 줄, 즉 천장과 바닥
for (j = 1; j <= n; j++) {
bw.write("*");
}
for (j = 1; j <= (n - 1) + (n - 2); j++) { // 테두리 바깥 공백
// 이런건 식 정리해서 (2 * n - 3) 이런식으로 써주면 깔끔하겠네요!
bw.write(" ");
}
for (j = 1; j <= n; j++) {
bw.write("*");
}
}
else { // 그 외, 기둥을 만드는 부분
if (i < n) {
for (j = 1; j <= i - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= (n - 1) + (n - 2) - 2 * (i - 1); j++) { // 테두리 바깥 공백
// 조건식 정리하면 -> 2 * (n - i) - 1
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
if (i > n) {
for (j = 1; j <= n - (i % n) - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= 2 * (i % n) - 1; j++) { // 테두리 바깥 공백
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
else if (i == n) {
for (j = 1; j <= i - 1; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
for (j = 1; j <= n - 2; j++) {
bw.write(" ");
}
bw.write("*");
}
}
bw.write("\n");
}
bw.flush();
}
}

성공하였습니다!
if else문에서 else로만 떼우려고 했더니..
다른 부분에서도 해당 조건에 걸려 이상한 부분에 까지 별을 찍어버린 모양입니다..
코드가 조금 복잡해 보입니다만..

(외면..)
참!!
이제부터 코드에 짧게 주석을 추가해서
제가 풀이한 논리의 아이디어를 표현할 수 있도록 해보려고 합니다!
이 글을 찾아오신 분들께 도움이 되셨으면 좋겠습니다..
이상입니다.