这个java程序产生不需要的结果

时间:2015-03-21 10:31:11

标签: java input

我写了一个读取输入然后将其打印出来的程序。

public class inverse {


public static void main (String arg[]) throws IOException {
    int input1 = System.in.read();
    System.out.println(input1);
    String temp=  Integer.toString(input1);
    System.out.println(temp);
    int[] numtoarray =new int[temp.length()];
    System.out.println(temp.length());
    for (int i=0 ;i<temp.length(); i++)
    {numtoarray[i]= temp.charAt(i);
    System.out.println(numtoarray[i]+"*");
    }

}}

但是当我写123456时它会打印49.但它应该打印123456.是什么导致了这个问题?

2 个答案:

答案 0 :(得分:3)

123456是一个整数,但System.in.read()将下一个字节作为输入读取,因此它不会按预期读取整数。使用Scanner#nextInt()方法读取整数:

Scanner input = new Scanner(System.in);
int input1 = input.nextInt();

您的numtoarray数组也将打印字节,而不是解析为字符串的整数的各个字符。要打印字符,请将类型更改为char[]

char[] numtoarray = new char[temp.length()];
System.out.println(temp.length());
for (int i = 0; i < temp.length(); i++) {
    numtoarray[i] = temp.charAt(i);
    System.out.println(numtoarray[i] + "*");
}

答案 1 :(得分:2)

read()不读取数字,它读取一个字节并将其值作为int返回。如果输入一个数字,则返回48 +该数字,因为数字0到9的ASCII编码值为48到57.

您可以使用扫描仪

这是代码

public static void main (String[] args) {

Scanner in = new Scanner(System.in);
int input1 = in.nextInt();
System.out.println(input1);
String temp=  Integer.toString(input1);
System.out.println(temp);
char[] numtoarray =new char[temp.length()];
System.out.println(temp.length());
for (int i=0 ;i<temp.length(); i++){
  numtoarray[i]= temp.charAt(i);
  System.out.println(numtoarray[i]+"*");
 }
}

DEMO