2017-12-03 56 views
0

大家好我基本上是创建一个程序,需要从用户输入大约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); 
      } 
      } 
     } 
    } 
} 
+1

这对我来说好像是一个围栏发布问题。此外,如果(input.toLowerCase()。startsWith(“y”)比所有这些更简单的话)最后System.exit(0);是CULPRIT。 – Meepo

+1

不要忘记*关闭*您的扫描仪 – StarCoder

+0

当我到达程序的最后一个阶段时,请输入第五个课程:当我进入课程时,它应该关闭程序并使用此循环打印数组值(对于(int x = 0; x

回答

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]); 
    } 
} 
} 

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

1

如果你改变了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 
+0

但是,这不会使它每次迭代打印课程数组? – Meepo

+1

不,最后'For'循环完全没有问题。它在我的系统上工作正常。 。 – meditat

+0

抱歉,你是正确的。我误解了它。 – Meepo

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. 制作两台扫描仪完全没用,因为没有关闭它们而占用内存。

我希望这有助于。

0

我做你的代码相当多的变化,如消除一些不必要的循环,但其现在的工作

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]); 


     } 

     } 
    }