Java inputstreamreader解析为int然后反转数组并打印为格式化字符串

时间:2019-01-15 14:00:33

标签: java arrays

输入来自InputStreamReader。首先需要将输入从String转换为int,并将其作为数组length。第二个输入将是一个String用空格分隔的数字,需要将它们从String转换为int,放入int数组,取反,然后打印为空格,然后以逗号分隔String

一个示例是,如果用户输入3作为初始输入,则应将数组length设置为[3]1 2 3的第二个输入。

将返回为

3 2 1

我已经放出一些系统输出来检查返回的内容,但是出现I@错误。

如果任何人都可以指出我要去的地方或需要更详细地了解的地方,我们将不胜感激。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) throws java.lang.Exception {
        String line;
        String stNew;

         BufferedReader inp = new BufferedReader (new InputStreamReader(System.in));

        // first input which sets array length
        line = inp.readLine();
        stNew = inp.readLine();

        //first input as array size and create array
        int iArrayLength = Integer.parseInt(line);
        int[] list = new int[iArrayLength];

    //  System.out.println(list + " list[] ");

        //second input to populate array
        String[] stArray = stNew.split(" ");

    //  System.out.println(stArray + " stArray[]")

        for (int i = 0; i < iArrayLength; i++ ){
            list[i] = Integer.parseInt(stArray[i]);
        }

    //  System.out.println(list + " list[] ");

        while (stArray.length != iArrayLength) {
            System.out.println("Please input " + iArrayLength + " integers");

            for (int i = 0; i < iArrayLength; i++) {
                list[i] = Integer.parseInt(stArray[i]);
            }

            for (int i = 0; i < list.length / 2; i++) {
                int temp = list[i];
                list[i] = list[list.length - 1 - i];
                list[list.length - 1 - i] = temp;
            }
        }
        System.out.println(list.toString());
    }
}

1 个答案:

答案 0 :(得分:1)

这些消息不是错误,这是默认情况下在Java中打印Object的方式。

arrayObject,并且没有定义任何@toString方法。它使用Object类的继承方法:

/**
 * Returns a string representation of the object. In general, the
 * {@code toString} method returns a string that
 * "textually represents" this object. The result should
 * be a concise but informative representation that is easy for a
 * person to read.
 * It is recommended that all subclasses override this method.
 * ...
 * @return  a string representation of the object.
 */
public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

从上面的代码中,您可以看到默认数组将被打印为类名+ @ +哈希码。

如果您尝试获取数组的类名,就像看到[I

System.out.println(a.getClass().getName());

完全符合toString()的实现。

要漂亮地打印阵列,请使用:

Arrays.toString(list);

示例:

public static void main(String[] args) {
    int[] a = {1, 2, 3};
    System.out.println(a.getClass().getName());
    System.out.println(a);
    System.out.println(Arrays.toString(a));
}

输出:

[I
[I@56cbfb61
[1, 2, 3]

此外,您在行上有一个无限循环

while (stArray.length != iArrayLength)

如果输入此代码块,程序将永远不会结束。