なぜこのプログラムはjcreatorではなく、NetBeansの上のランタイムエラーを与えていますか?
-
19-09-2019 - |
質問
これは、球体のオンライン裁判官ペイリン問題の私の解決策です。これは、NetBeans上で正常に動作しますが、裁判官は、それは例外RuntimeErrorを与えると言って私の答えを拒否しています。私はJCreator上でそれを試してみましたが、それは言います:
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:468)
at java.lang.Integer.parseInt(Integer.java:497)
at Main.main(Main.java:73)
私はそれが構文解析するために、空の文字列を渡していないよ、これはなぜですか?
コード
import java.io.*;
import java.util.*;
class Main {
public static int firstPalinLargerThanNum(int num){
int foundPalin =0;
int evalThisNum = ++num;
while (true){
if (isPalin(evalThisNum))
break;
evalThisNum++;
}
foundPalin = evalThisNum;
return foundPalin;
}
public static boolean isPalin(int evalThisNum){
boolean isItPalin = false;
int dig=0;
int rev=0;
int n = evalThisNum;
while (evalThisNum > 0)
{
dig = evalThisNum % 10;
rev = rev * 10 + dig;
evalThisNum = evalThisNum / 10;
}
if (n == rev) {
isItPalin=true;
}
return isItPalin;
}
public static void main(String args[]) throws java.lang.Exception{
BufferedReader r1 = new BufferedReader(new InputStreamReader(System.in));
/*BufferedReader r1 = new BufferedReader (new FileReader(new File ("C:\\Documents and Settings\\Administrator\\My Documents\\NetBeansProjects\\Sphere\\src\\sphere\\sphere\\PALIN_INPUT.txt")));*/
String read = r1.readLine();
int numberOfTestCases = Integer.parseInt(read);
for (int i=0; i<numberOfTestCases;i++){
read = r1.readLine();
if (read!=null){
int num = Integer.parseInt(read);
System.out.println(firstPalinLargerThanNum(num));
}
}
}
}
入力:
2
808
2133
の行73は、次のとおりint num = Integer.parseInt(read);
解決
プログラムは番号を期待しているときに<Enter>
を打つ場合は、そのエラーを取得します。
あなたの入力があるとします。
2
3
<Enter>
あなたが二回繰り返すために、あなたの日常を語っているように、あなたは、あなたが数3を処理した後に示されたエラーを受け取ることになります。
はさておき、数の解析を中心にエラー処理の上に、あなたはまた、trim()
メソッドにreadLine()
を紹介したいかもしれませんが呼び出されます:
String read = r1.readLine().trim();
これは、ユーザーが数字の周りの空白に入れている場合には優雅に入力を処理できるようになります。
他のヒント
ただ、野生の推測:異なる行末区切りに問題がある可能性があります。
例えば。あなたのプログラムは、実際には、2<CR><LF>808<CR><LF>2133<CR><LF>
を取得する行が<CR>
で終了し、ラインを処理することを考えてます。
今では、それが空の文字列を読んで考えさせる<LF>
を見つけます。
あなたは、ユーザーがプログラムを使用すると、あなたに正しい入力を与える方法を知っていると仮定することはできません。裁判官は、おそらく任意の番号を入力せずに、エンターキーを押し。どのように彼/彼女はあなたのプログラムが必要とする入力を知ることになっていますか?プログラムは、不可解なエラーが発生しているユーザの顔に爆破していない、正常に失敗する必要があります。
ユーザーが何をすべきかを知っているように、あなたは、次のようなものをやってする必要があります:
private static function readInt(BufferedReader reader) throws IOException { boolean done = false; int result = -1; while ( ! done ){ System.out.print("Please enter an integer: "); String str = reader.readLine(); try{ result = Integer.parseInt(str); done = true; }catch(NumberFormatException cantconvert){ System.out.println("That isn't an integer. Try again."); } } return result; }
また、あなたが主な機能で例外指定子を使用しないでください(使用しないことがあり、「メイン」の署名に「スロー」)。あなたはそれらのIOExceptionsを処理し、それを修正するか、それが離れて行くようにする例外についてのあなたができることは何もない場合でも、ユーザーにきれいで分かりやすいメッセージを印刷する必要があります。
私は、エラーなしでのEclipse 3.4の下であなたの例のコードを実行しました。
:私はは、私だけは、テストケースの指定された数を提供しなかった場合、同様のエラーを誘導することができたすなわちの。6
56
87
[Enter]
だから私は入力の不十分な行があるときに、このエラーはのみ生成されますので、どこかで起こって余分akf
がなければならないということEnter
に同意するように傾斜しています。