这就是为什么代码的格式是如此的很重要的!间隔嵌套的if/else if/for语句允许您更快更轻松地遵循程序的逻辑。
这里是你的代码的格式化版本:
import java.util.Scanner;
/** * * @author jodh_ */
public class ArrayExample
{
public static void main(String args[])
{
String[] course = new String[5];
for (int i = 0; i < 5; i++)
{
System.out.println("Please enter course name " + (i + 1) + ": ");
Scanner gettingname = new Scanner(System.in);
String coursenames = gettingname.nextLine();
course[i] = coursenames;
if (i < 4)
{
for(int j =0; j<4; j++)
{
System.out.println("");
System.out.println("Would you like to continue? ((y)Yes/(n)No)");
Scanner gettingYesOrNo = new Scanner(System.in);
String input = gettingYesOrNo.nextLine();
if (input.equals("yes") || input.equals("y") || input.equals("Y") || input.equals("YES") || input.equals("Yes"))
{
System.out.println("");
break;
}
else if (input.isEmpty())
{
System.out.println("Input cannot be empty!! Please try again");
}
else if (input.equals("no") || input.equals("No") || input.equals("NO") || input.equals("n") || input.equals("N"))
{
System.out.println("Your select courses are as follows");
}
for (int x = 0; x < i + 1; x++)
{
System.out.println("");
System.out.println((x + 1) + ": " + course[x]);
}
System.exit(0);
}
}
}
}
}
在这种格式的代码,我们可以很容易地看到正在执行的代码的每一块地方。
如果你看看检查“是”的部分,你会看到,如果满足条件,它会跳出内循环。这意味着如果用户给出“是”的答案,那么在内部循环内的这个断点下的所有代码都不会被执行。
if (input.equals("yes") || input.equals("y") || input.equals("Y") || input.equals("YES") || input.equals("Yes"))
{
System.out.println("");
break;
}
您的打印语句是这里面内部的for循环,这实际上意味着,如果条件“是” if语句不满足它只会执行。如果您要在“您想继续吗?”中输入文字“猫”吗?提示它会跳过所有if/else if语句,因为它们都不符合,执行打印循环,输出课程和System.exit(0);终止程序。
看来,预期的目的是输出课程,如果用户输入“否”。因此,让我们看看我们是否可以将打印循环移动到“否”的范围内。
else if (input.equals("no") || input.equals("No") || input.equals("NO") || input.equals("n") || input.equals("N"))
{
System.out.println("Your select courses are as follows");
for (int x = 0; x < i + 1; x++)
{
System.out.println("");
System.out.println((x + 1) + ": " + course[x]);
}
System.exit(0);
}
只有当用户输入“否”时,才会输出课程。然后它将传播这个节目。完善!
所以让我们来谈谈这个空输入条件:
else if (input.isEmpty())
{
System.out.println("Input cannot be empty!! Please try again");
}
除非需要专门检查输入是空的,你可能想只是一个else语句替换此。让我们看看会是什么样子。
if (input.equals("yes") || input.equals("y") || input.equals("Y") || input.equals("YES") || input.equals("Yes"))
{
System.out.println("");
break;
}
else if (input.equals("no") || input.equals("No") || input.equals("NO") || input.equals("n") || input.equals("N"))
{
System.out.println("Your select courses are as follows");
for (int x = 0; x < i + 1; x++)
{
System.out.println("");
System.out.println((x + 1) + ": " + course[x]);
}
System.exit(0);
}
else
{
System.out.println("Invalid input!! Please try again.");
j--;
}
您需要递减j,因为在for循环结束时它将递增到下一个课程。由于用户输入无效,因此我们希望将课程迭代器保持在原来的位置,并且继续询问用户是否希望继续,直到进行了有效的选择。
我们快到了!
现在我们已经对输入条件进行了排序,当用户到达第5个课程时会发生什么?
现在我们只有在用户回答“否”时才打印课程。所以在课程结束时,我们需要打印完整的课程字符串数组。最终的产品看起来像这样:
import java.util.Scanner;
/** * * @author jodh_ */
public class ArrayExample
{
public static void main(String args[])
{
String[] course = new String[5];
for (int i = 0; i < 5; i++)
{
System.out.println("Please enter course name " + (i + 1) + ": ");
Scanner gettingname = new Scanner(System.in);
String coursenames = gettingname.nextLine();
course[i] = coursenames;
if (i < 4)
{
for(int j =0; j<4; j++)
{
System.out.println("");
System.out.println("Would you like to continue? ((y)Yes/(n)No)");
Scanner gettingYesOrNo = new Scanner(System.in);
String input = gettingYesOrNo.nextLine();
if (input.equals("yes") || input.equals("y") || input.equals("Y") || input.equals("YES") || input.equals("Yes"))
{
System.out.println("");
break;
}
else if (input.equals("no") || input.equals("No") || input.equals("NO") || input.equals("n") || input.equals("N"))
{
System.out.println("Your select courses are as follows");
for (int x = 0; x < i + 1; x++)
{
System.out.println("");
System.out.println((x + 1) + ": " + course[x]);
}
System.exit(0);
}
else
{
System.out.println("Invalid input!! Please try again");
j--;
}
}
}
}
System.out.println("Your select courses are as follows");
for (int x = 0; x < 5; x++)
{
System.out.println("");
System.out.println((x + 1) + ": " + course[x]);
}
}
}
注:有更优化的方式来获得相同的结果,但我试图保持代码尽量接近原来的逻辑成为可能。
这对我来说好像是一个围栏发布问题。此外,如果(input.toLowerCase()。startsWith(“y”)比所有这些更简单的话)最后System.exit(0);是CULPRIT。 – Meepo
不要忘记*关闭*您的扫描仪 – StarCoder
当我到达程序的最后一个阶段时,请输入第五个课程:当我进入课程时,它应该关闭程序并使用此循环打印数组值(对于(int x = 0; x