【问题标题】:process does not terminate when enter no输入 no 时进程不会终止
【发布时间】:2012-11-06 21:55:42
【问题描述】:
package homework4;
import java.util.Scanner;
public class Prog4 {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args)
{   CreditCardNumber[] cred1;
    CreditCardNumber cred2 = getInput();
    Display("The complete number from your input:", cred2);
    cred1 = getInputArray();
    DisplayArray(cred1);
    TryAnother(cred1);
}

public static CreditCardNumber getInput() {
    String ID;
    String accNum;
    CreditCardNumber tempCred;      
    System.out.printf("Please enter issuer ID:");
    ID = scanner.next();
    System.out.printf("Please enter account number:");
    accNum = scanner.next();
    tempCred = new CreditCardNumber(ID, accNum);

    return tempCred;
}
public static void Display(String ch, CreditCardNumber cred2)
{

    System.out.println(ch);
    System.out.println(cred2.toString().replaceAll(".{4}", "$0   "));       
}

public static CreditCardNumber[] getInputArray()
{
    CreditCardNumber[] tempArray;
    String tempID;
    int size;       
    System.out.printf("Please enter size of the aray:");
    size = scanner.nextInt();
    if(size < 1)
    {
        size = 1;
    }
    tempArray = new CreditCardNumber[size];
    System.out.printf("Please enter issuer ID:");
    tempID = scanner.next();
    for(int i = 0; i < tempArray.length; i++)
    {
        tempArray[i] = new CreditCardNumber();
        tempArray[i].CreateCred(tempID);
    }

    return tempArray;
}

public static void DisplayArray(CreditCardNumber[] cred1)
{
    for(int i = 0; i< cred1.length; i++)
    {
        Display("Credit Card # " + i+":" + '\n', cred1[i]);
    }
    System.out.println();
}

public static boolean TryAnother(CreditCardNumber[] cred1)   
{
    String s;
    System.out.printf("Get more credit card numbers? (n for no):");
    s = scanner.next();
    while(s.charAt(0) != 'N' && s.charAt(0) != 'n')
    {                                       
            cred1 = getInputArray();
            DisplayArray(cred1);    
            if(s.charAt(0) != 'N' && s.charAt(0) != 'n')
            TryAnother(cred1);
    }       


    return false;   
}
}

嗨,当我回答“否”时,Tryanother 方法有问题,进程不会终止,而是提示用户再次输入数组的大小,如下所示:

Please enter issuer ID:321321
Please enter account number:654654654
The complete number from your input:
3213   2165   4654   6549   
Please enter size of the aray:7
Please enter issuer ID:789789
Credit Card # 0:

7897   8987   8895   1653   
Credit Card # 1:

7897   8935   5880   5197   
Credit Card # 2:

7897   8997   8152   8134   
Credit Card # 3:

7897   8996   1605   8067   
Credit Card # 4:

7897   8953   2006   5521   
Credit Card # 5:

7897   8964   3319   8191   
Credit Card # 6:

7897   8986   1830   7068   

Get more credit card numbers? (n for no):y
Please enter size of the aray:3
Please enter issuer ID:345345
Credit Card # 0:

3453   4590   2392   9734   
Credit Card # 1:

3453   4549   5025   1905   
Credit Card # 2:

3453   4504   2989   0927   

Get more credit card numbers? (n for no):n
Please enter size of the aray:

正如您所见,当我输入“y”时,程序会提示用户输入数组的大小,但是当我输入“n”而不是终止程序时,会提示用户输入数组的大小

我该如何解决这个问题?

提前谢谢你

【问题讨论】:

    标签: java arrays object boolean


    【解决方案1】:

    刚刚注意到您的 while 循环中有 s.charAt(0) != 'N' &amp;&amp; s.charAt(0) != 'n',并且还在循环中递归地调用了相同的函数。

    改成if(s.charAt(0) != 'N' &amp;&amp; s.charAt(0) != 'n')

    【讨论】:

    • 不它没有,这是我以前的,它不起作用
    • 谢谢,我没有意识到通过将 while 循环放在那里,当它在 while 循环内时,它不会再次检查条件
    【解决方案2】:

    使用 String.startsWith() 方法。

    while(!s.startsWith("n") && !s.startsWith("N"))
    

    但它仍然应该适用于您的方法,我正在研究它。 :)

    【讨论】:

    • 这不会让它变得更复杂吗?因为如果 s 包含 n 和 N 它将返回 false
    • @user1787811 不,如果 s 包含 n,它将不会检查第二个操作数。 .但你的方法应该仍然有效..我正在寻找它
    猜你喜欢
    • 2016-04-16
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    • 2014-10-25
    相关资源
    最近更新 更多