为什么要在数组末尾打印数组的长度?

时间:2018-07-18 12:53:33

标签: java arrays javafx

我有一个JavaFX textField,可以从中获取字符串输入。我正在使用toCharArray()将字符串作为char数组传递。但是由于某些无法解释的原因,数组的长度出现在数组之后。任何想法可能是什么原因造成的?我希望输入为16个元素,所以我很难对其进行编码,但是由于某种原因,我得到的结果是18个元素,最后两个元素为1、6。(当我更改输入长度时,后面的两个元素紧随其后)。现在我知道用Java的bug来称呼它是愚蠢的,因此问题就在我的头上,但是对于我自己的一生,我无法弄清楚吗?

public class something extends Application {
    String input;
    char[] chars;

    public void start(Stage primaryStage) {
    TextField field = new TextField("Enter");
    input = field.getText();

    Button btn = new Button("Check");
    btn.setOnAction(e -> validator(input));
}

 public void validator(String input) {

    chars = new char[input.length()];

    System.out.println(input.length()); // this still shows 16

    if (chars.length == 16) {
    chars = input.toCharArray();
    }

    for (int i = 0; i < chars.length; i++){
        System.out.print(chars[i]);
    } //here the problem occurs, when I try to print the array

    System.out.println(chars.length); //this also shows 16

    if (chars[0] == '4'){
           System.out.println("yayy");
           check(input);
        }
    else {
      // shows an alert
    }
}
}

public void check(String str){
  // some other code that works properly
}

public static void main(String[] args) {
    Application.launch(args);
}

2 个答案:

答案 0 :(得分:3)

请注意,每个字符都印有print,而不是println

for (int i = 0; i < chars.length; i++){
    System.out.print(chars[i]);
}
System.out.println(); // To a new line
System.out.println(chars.length); //this also shows 16

答案 1 :(得分:0)

首先,Java不会将数组的长度附加到数组中。 String.toCharArray也没有。因此,无论您看到什么,都不是解释。

另一方面,由于您没有向我们提供实际的输入和输出,因此我无法解释确切的情况是什么。


即使如此,代码中也存在明显的误解

首先,该语句没有做任何有用的事情:

chars = new char[input.length()];

为什么?因为

chars = input.toCharArray();

将返回一个全新的数组。它不会填充您先前分配的字符数组。 (作业将替换它...)

第二个误解是:

if (chars[0] == 4){
     ....
}

尚不清楚您期望测试做什么,但是没有测试字符“ 4”。它正在测试Unicode代码点\ u0004 ...,它是ASCII EOT控制字符,或典型西方键盘上的CNTRL-D

简而言之,验证是可能没有测试您的期望。 (您为什么希望用户输入控制字符?)

要测试字符“ 4”,请使用字符文字。单引号。

if (chars[0] == '4'){
     ....
}