即使将思想值分配给元素,输入数据也为空

时间:2013-08-11 10:36:23

标签: java

我遇到了这段代码的问题:

package Jensen;

import java.util.Scanner;

public class JensenUppgift7 {

    public static void main(String[] args)
    {
            Scanner scanner = new Scanner(System.in);
            String[] ord = new String[10];

            System.out.println("Hej och välkommen till mitt program. Det här programmet" +
                            " kommer fråga dig att mata in ord som du väljer och sedan skriva " +
                            "ut de i omvänd ordning.");

            for(int x = 0; x < ord.length; x++)
            {
                    System.out.println("Skriv ett ord. Avsluta programmet genom att skriva 'Sluta'");
                    String indata = scanner.next();

                    if(indata.compareTo("Sluta") == 0 || x == ord.length - 1)
                    {
                            for(int i = x; i >= 0; i--)
                                    if(i == 0)
                                            System.out.print(ord[i] + ".");
                                    else
                                            System.out.print(ord[i] + ", ");
                            break;
                    }
                    else
                            ord[x] = indata;
            }
    }
}

程序要求十个或更少的字符串并以相反的顺序打印出来。我的问题是,当我遍历数组时,打印出的第一个输入值将等于null。我不知道为什么。其余输入正确打印出来。

2 个答案:

答案 0 :(得分:4)

您根本没有为数组分配最后一个值。以下if条件:

if(indata.compareTo("Sluta") == 0 || x == ord.length - 1)
true的值为x时,

变为ord.length - 1,这是最后一个索引,并且它未到达else块,您将在其中指定数组的值。

您不需要在if块中拥有第二个条件。 for循环将处理您的索引。只需删除它。

您也可以使用equals方法代替compareTo来检查是否相等。并且由于您正在比较用户输入的值,我建议您进行忽略大小写比较:

 if(indata.equalsIgnoreCase("Sluta"))

实际上我不理解这个if块的逻辑,因为你开始根据这个条件打印数组。但是可以肯定的是,如果你在那里打印阵列,它将无法完全填充。由于您的邮件不是英文,因此很难猜测您要做什么。这是某种退出条件吗?通常,当您将用户输入存储在数组中时,您没有退出条件。你让数组索引决定何时停止。

我会让你决定你真正想要的是什么,在完成所需的更改之后,你可以在给定的for循环后运行另一个for循环,以反向打印数组中的值。

答案 1 :(得分:1)

最后一个元素从输入循环中省略。将条件x == ord.length - 1更改为x == ord.length