ようやくハマりから抜け出せた。
「お手本を写してもなんかうまくいかない……」
「質問を投げてみたけどmaxとminはC++と一緒……? うーん……?」
という感じで迷っていたのだが、
なんてことはない、JavaのString一致判定はequals()メソッドであることを失念していたというオチだった。
==で繋いでも駄目ですよそりゃ。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int h, w, y, x;
String[][] map;
Scanner sc = new Scanner(System.in);
h = sc.nextInt();
w = sc.nextInt();
y = sc.nextInt();
x = sc.nextInt();
map = new String[h][w];
for(int i=0; i<h; i++){
String temp = sc.next();
for(int j=0; j<w; j++){
map[i][j] = String.valueOf(temp.charAt(j));
}
}
//_____ここまで初期化______
for(int i=-1; i <= 1; i+=2){
for(int j=1; ; j++){
if(x+(i*j) == -1 || x+(i*j) == w || y+(i*j) == -1 || y+(i*j) == h){
break;
}
if(map[y+(i*j)][x+(i*j)].equals("*")){
for(int k = Math.min(y+(i*j), y); k <= Math.max(y+(i*j), y); k++){
map[k][k-y+x] = "*";
}
break;
}
}
}
for(int i=-1; i <= 1; i+=2){
for(int j=1; ; j++){
if(x+(i*j) == -1 || x+(i*j) == w || y-(i*j) == -1 || y-(i*j) == h){
break;
}
if(map[y-(i*j)][x+(i*j)].equals("*")){
for(int k = Math.min(x+(i*j), x); k <= Math.max(x+(i*j), x); k++){
map[y+x-k][k] = "*";
}
break;
}
}
}
map[y][x] = "*";
// _____ここから表示_______
for(int i=0; i<h; i++){
for(int j=0; j<w; j++){
System.out.print(map[i][j]);
}
System.out.println("");
}
}
}
ただ、「囲む処理をどういう基準で算出しているのか」についてはまだ理解出来ていないので、紙に書くなりして整理してみようと思う。
意外とこういうところでアナログって強いのよね。
そこを理解したらやっと次に行ける……。Cランク相当問題とはいったい……。(体調不良のせいってことにしといて)