0

我对这段代码有问题:

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。我不确定为什么。其余输入正确打印出来。

4

2 回答 2

4

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

if(indata.compareTo("Sluta") == 0 || x == ord.length - 1)

当istrue的值(最后一个索引)并且它没有到达您将值分配给数组的块时变为。xord.length - 1else

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

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

 if(indata.equalsIgnoreCase("Sluta"))

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

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

于 2013-08-11T10:38:18.633 回答
1

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

于 2013-08-11T10:41:14.493 回答