我遇到了这段代码的问题:
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。我不知道为什么。其余输入正确打印出来。
答案 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
。