我的第二条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]);

}

}

}

注:有更优化的方式来获得相同的结果,但我试图保持代码尽量接近原来的逻辑成为可能。

回答:

如果你改变了breakcontinue。尝试我的这个代码将正常工作。

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

}

}

的我就是这样做的逻辑:

  1. while循环条件使得它,这样你就不会继续循环,当所有的课程都充满。和循环内,检验该指数是不是4

  2. 有你的第二个循环

  3. 你可以在循环之后打印您阵列现在不再需要。

  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

回到顶部