我的第二条if语句被忽略不知道为什么
大家好我基本上是创建一个程序,需要从用户输入大约5个输入并将它们存储在一个名为course的数组中....每次用户输入1个课程时,我想问用户如果他想继续..如果他输入yes程序将继续,否则它显示了在数组中的值(当然)......我的第二条if语句被忽略不知道为什么
我面临的问题: -
1 。我不想让用户继续,如果他已经输入了第五个值的最后一个值。
2.my第二循环基本上被忽略,我不知道为什么如果它工作,每件事情都会好的。
3.如果用户输入最后一个值,并根据我的程序按是,它仍然没有打印我的课程(数组)中的值。
/* * To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package ArrayExample;
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/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]);
}
}
}
注:有更优化的方式来获得相同的结果,但我试图保持代码尽量接近原来的逻辑成为可能。
回答:
如果你改变了break
到continue
。尝试我的这个代码将正常工作。
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){
System.out.println("");
System.out.println("Would you like to continue? ((y)Yes/(n)No)");
Scanner gettingYesOrNo = new Scanner(System.in);
input = gettingYesOrNo.nextLine();
if (input.equals("yes") || input.equals("y") || input.equals("Y") || input.equals("YES") || input.equals("Yes")) {
System.out.println("");
continue;
} 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]);
}
}
}
这里是输出
Please enter course name 1: androiid
Would you like to continue? ((y)Yes/(n)No)
y
Please enter course name 2:
dsfnfv
Would you like to continue? ((y)Yes/(n)No)
y
Please enter course name 3:
sfgngff
Would you like to continue? ((y)Yes/(n)No)
y
Please enter course name 4:
grgngr
Would you like to continue? ((y)Yes/(n)No)
y
Please enter course name 5:
fgmt
1: androiid
2: dsfnfv
3: sfgngff
4: grgngr
5: fgmt
Process finished with exit code 0
回答:
下面是一些代码,我写了可能会解决您的程序。你必须执行其余部分,但它应该很容易。
import java.util.Scanner; public class ArrayExample {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String[] course = new String[5];
String yesOrNo;
int index = 0;
do{
System.out.println("Please enter course name " + (index + 1) + ": ");
course[index] = input.nextLine();
if(index < 4) {
System.out.println("Would you like to continue? ((y)Yes/(n)No)");
yesOrNo = input.nextLine();
}
index++;
}while(yesOrNo.toLowerCase().startsWith("y) && index < 5)
//if the loop is exited then we know either the user chose not to continue or all the course names have been filled
//handle that here
}
}
的我就是这样做的逻辑:
while循环条件使得它,这样你就不会继续循环,当所有的课程都充满。和循环内,检验该指数是不是4
有你的第二个循环
你可以在循环之后打印您阵列现在不再需要。
制作两台扫描仪完全没用,因为没有关闭它们而占用内存。
我希望这有助于。
回答:
我做你的代码相当多的变化,如消除一些不必要的循环,但其现在的工作
public static void main(String args[]) { String[] course = new String[5];
Scanner gettingname = new Scanner(System.in);
int i=0;
for (; i < 5; i++) {
System.out.println("Please enter course name " + (i + 1) + ": ");
course[i] =gettingname.nextLine();
System.out.println("");
if(i==4) break;
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("");
continue;
}
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")) {
break;
}
}
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]);
}
}
}
以上是 我的第二条if语句被忽略不知道为什么 的全部内容, 来源链接: utcz.com/qa/259515.html