2016-04-10 12 views
-1
import java.io.*; 
public class Test { 
public static int ReadInt1(){ 
    int x; 
    try { 
    x = (int)System.in.read(); 
    return x; 
    }catch (IOException e) { 
     System.out.println("Exception: " + e.toString()); 
     return 0; 
    }catch (NumberFormatException e) { 
     System.out.println("Exception: " + e.toString() + "\nReturned value: -1"); 

     return-1; 
    } 
}  
public static int ReadInt2(){ 
    int y; 
    try { 
    y = (int)System.in.read(); 
    return y; 
    }catch (IOException es) { 
     System.out.println("Exception: " + es.toString()); 
     return 0; 
    } catch (NumberFormatException es) { 
     System.out.println("Exception: " + es.toString() + "\nReturned value: -1"); 
     return-1; 
    } 
} 
    public static int ReadInt3(){ 
    int z; 
    try { 
    z = (int)System.in.read(); 
    return z; 
    }catch (IOException ed) { 
     System.out.println("Exception: " + ed.toString()); 
     return 0; 
    } catch (NumberFormatException ed) { 
    System.out.println("Exception: " + ed.toString() + "\nReturned value: -1"); 
    return-1; 
    }  
} 
public static void main(String args[]){ 
System.out.println("Type a number1"); 
int x = ReadInt1(); 
System.out.println("Type a number2"); 
int y = ReadInt2(); 
System.out.println("Type a number3"); 
int z = ReadInt3(); 
if (x-3*z !=0){ 
    System.out.println((3*(x-2)*y)/(x-3*z)); 
}else throw new ArithmeticException(); 
} 
} 

私がしたいのは、3 int型を入力し、int型であるかどうかをチェックしてから、(3 *(x-2)* y)/ x-3 * z)である。問題は、最初の数値1を入力した後で、プログラムが '数値2と3を入力する'というint値ではない場合、数値を与えて結果を出力できないということです。 2. int型の場合は、「数値2を入力してください」と表示されます。 「数値を入力してください.3」と入力して番号を入力します。私はまた、どのようにプログラマーがそれらの結果を思い付くのか知りません。タイプと印刷結果の3つの整数値を確認する

答えて

0

このメソッドSystem.in.read();は1バイトだけを読み取ります。例えばあなたが

1<enter> 
1

<enter>を入力したときにそれぞれ1バイトです。 1は、1のASCIIコードである49になり、バイトは^ JのASCIIコードである10になります。

あなたがテキストとして番号を読み、この

Scanner sc = new Scanner(System.in); 
System.out.println("Type a number1"); 
int x = sc.nextInt(); 
System.out.println("Type a number2"); 
int y = sc.nextInt(); 
System.out.println("Type a number3"); 
int z = sc.nextInt(); 
System.out.println(3.0 * (x-2) * y/(x - 3 * z)); 

ノートのように、int値としてそれを解析したいほとんどの場合:私はあなたが分裂を行う際3.0はそう、あなたが浮動小数点を取得した値を使用します整数の除算を行う代わりに値を返します。

+0

これは私が変更したものです: 'byte b2 [] = new byte [16]; 文字列str2; try { System.in.read(b2); str2 =(新しい文字列(b2))。trim(); 戻り値Integer.parseInt(str2); ' – FloatsAreFun

+0

@FloatsAreFunこれは、整数を入力する間に一時停止する場合にのみ機能します。ファイルからの入力をリダイレクトした場合はうまくいかないでしょう。実際にテキストが必要なときにコンソールをバイナリとして読むことは、あなたが何をしていてもエラーが発生しやすく、複雑すぎることになります。 –