2017-05-08 78 views
1
public static void choice(String arrayString[], double arrayReal[]) 
{ 
    int choice; 
    Scanner sc = new Scanner(System.in); 
    System.out.println("1.display mark"); 
    System.out.println("2.exit"); 
    choice = sc.nextInt(); 



    while (choice !=2 && choice != 1) 
    { 
     System.out.println("invalid input enter again"); 
     choice = sc.nextInt(); 
    } 

    switch (choice) 
    { 
      case 1: 
       output(arrayString, arrayReal); 
       break; 
      case 2: 
       System.out.println("exiting"); 
       break; 
      default: 
       System.out.println("invalid choice choose between 1 and 2"); 
       choice = sc.nextInt(); 
    } 




} 

public static void output(String arrayString[], double arrayReal[]) 
{ 
    String name; 
    Scanner sc = new Scanner(System.in); 
    for (int i=0;i<arrayString.length;i++) 
    { 
     System.out.println(arrayString[i]); 
    } 
    System.out.println("enter stident name"); 
    name = sc.nextLine(); 
    for (int k=0;k<arrayString.length;k++) 
    { 
     if(!arrayString.equals(name)) 
     { 
      System.out.println("invalid name"); 
      choice(arrayString, arrayReal); 
     } 
    } 

    for (int j=0;j<arrayString.length;j++) 
    { 
     if (arrayString[j].equals(name)) 
     { 
      System.out.println("mark of " + arrayString[j] + "is " + arrayReal[j]); 
     } 
    } 

即时尝试验证学生名称,如果它不等于数组中的任何名称返回到菜单。它会返回菜单,但问题在于返回到菜单后,即使我输入了正确的学生姓名,如果keps返回菜单。我认为循环应该循环设置次数并传递给下一个代码?是对的吗?我的方法也正确吗?如果在最后的for循环中尝试过,但是这并没有结束,因为我也想要它。任何帮助表示赞赏谢谢!for循环 - 循环超过其应该?

EDIT- 感谢您发现错误。固定arrayString.equals(名称)arrayString [K] .equals(名称),但仍是同样的问题

+0

''如果< - 你是比较数组' arrayString'转换为String名称。他们永远不会平等。 –

+1

我真的不知道其余的代码,但是这个'if(!arrayString.equals(name))'将总是'true',因为你正在比较'String'和'String [ ]'。可能你的意思是'if(!arrayString [k] .equals(name))'(这也会导致问题,因为除非数组中的所有字符串相同,否则其中一个将失败)。 – SJuan76

回答

2

你的问题在这里IST:!

for (int k=0;k<arrayString.length;k++) 
{ 
    if(!arrayString.equals(name)) 
    { 
     System.out.println("invalid name"); 
     choice(arrayString, arrayReal); 
    } 
} 

您有String name比较数组String[] arrayString。他们永远不会被视为平等的,因此你的方法总是被称为choice。 此外,整个循环完全没有意义,因为您从不使用循环索引k进行任何操作。

根本不需要循环。相反,你可以将字符串数组简单地转换到一个临时目录,并检查它是否包含你输入:

if(!Arrays.asList(arrayString).contains(name)) 
{ 
    System.out.println("invalid name"); 
    choice(arrayString, arrayReal); 
} 

编辑:

这里很短的主要方法,其可用于测试:

public static void main(final String[] args) { 
    final String[] test = { "Mark", "Peter" }; 
    final double[] test2 = { 1, 2 }; 
    choice(test, test2); 
} 

输入/输出:

OUTPUT: 1.display mark 
OUTPUT:2.exit 
INPUT: 1 
OUTPUT: Mark 
OUTPUT: Peter 
OUTPUT: enter stident name 
INPUT: Mark 
OUTPUT: mark of Markis 1.0 
+0

我改变了我的代码,但它仍然有同样的问题@ OH GOD SPIDERS –

+0

适合我。请记住,比较区分大小写。所以如果你的名单中有一个名字“Peter”,你不能在搜索中键入“peter”。我将添加一个用于测试的主要方法。 –

0

逻辑在这个部分,加入指数后,仍然是错误的:

for (int k=0;k<arrayString.length;k++) 
{ 
    if(!arrayString[k].equals(name)) 
    { 
     System.out.println("invalid name"); 
     ... 
    } 
} 

这将在不特定名称的列表,每一个名字打印“无效的名称”。例如:如果数组中的第一个名字不匹配,那么无论第二个条目是否匹配,您都会收到一条消息(并选择调用)。

的方法之一是,直到找到名称搜索整个数组,然后对结果Act:(!arrayString.equals(名称))

boolean found = false; 
for (int k=0;k<arrayString.length;k++) 
{ 
    if(arrayString[k].equals(name)) 
    { 
     found = true; 
     break; // stop searching 
    } 
} 

if (!found) 
{ 
    System.out.println("invalid name"); 
    choice(arrayString, arrayReal); 
}