[BOJ]4673番セルフサービス番号

10299 ワード

白駿#4673セルフサービス番号(https://www.acmicpc.net/problem/4673)

コード-Python
def self_num(a):
    for i in str(a):
        a+=int(i)
    return a
lst_res = [i for i in range(1,10001)]
for a in range(1,10001):
    if 0<self_num(a)<10001:
        try: lst_res.remove(self_num(a))
        except: pass
    if a in lst_res:
        print(a)
コード-Java
import java.util.*;
public class Main {
    public static int selfnum(int a){
        String stra = Integer.toString(a);
        for(int i=0;i<stra.length();i++){
            a+=stra.charAt(i) - '0';
        }
        return a;
    }
    public static void main(String[] args) throws Exception {
		ArrayList<String> res = new ArrayList<String>();

        for(int i=1;i<10001;i++){
            res.add(i+"");
        }
        for (int i=1;i<10001;i++){
            if (1<=selfnum(i) && selfnum(i)<10001){
                try{
                    res.remove(selfnum(i)+"");
                }catch (Exception e){}
            }
            if (res.contains(i+"")){
                System.out.println(i);
            }
        }
    }
}
このコードはPython→Javaで実現するのに苦労しました.
PythonのpassはJavaにありません.生成者が1つ以上ある場合、try文に存在しない要素はremove文をキャプチャしようとしたときに発生したエラーをキャプチャしようとするので、Exceptionとして処理されます.
また、ArrayListを整数型とすると出力の結果値が異なり、道具値で除去したPythonのremoveとは異なりjavaのremoveが整数型を受け入れればインデックスで除去される可能性がある.したがって、リストをStringに変更し、removeの入力パラメータをオブジェクトに渡して問題を解決する.