повторить метод, пока ответ да

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)   // pass cred1 as a parameter
{
    String s;
    System.out.printf("Get more credit card numbers? (n for no):");
    s = scanner.next();
    if(s.charAt(0) != 'N' || s.charAt(0) != 'n')
    {

        do
        {
            TryAnother(cred1);
            cred1 = getInputArray();
            DisplayArray(cred1);                
        }while(s.charAt(0) != 'N' || s.charAt(0) != 'n');       
    }
    return false;   // put the return statement here
}
}

Привет, я пытаюсь повторить метод getInputArray в своем методе TryAnother, я пробую это с циклом do-while, но он сказал, что cred1 не определен внутри цикла do while, но когда я пытаюсь создать локальный объект для cred1, это дало мне код ошибки недоступен Вот как должен выглядеть вывод, если цикл do-while работает

Enter a credit card issuer number: 321321
Enter an account number: 654654654
The complete number from your input: 
3213 2165 4654 6549

Enter the number of elements in the array: 7
Enter an issuer ID# (6 digits): 789789

Credit Card # 0: 
7897 8931 4062 1219

Credit Card # 1: 
7897 8920 2125 3522

Credit Card # 2: 
7897 8971 9793 0944

Credit Card # 3: 
7897 8979 3216 3090

Credit Card # 4: 
7897 8995 0461 8493

Credit Card # 5: 
7897 8948 8037 5909

Credit Card # 6: 
7897 8966 0251 9953

Get more credit card numbers? (n for no): ok

Enter the number of elements in the array: 3
Enter an issuer ID# (6 digits): 345345

Credit Card # 0: 
3453 4576 6705 1666

Credit Card # 1: 
3453 4548 1163 5684

Credit Card # 2: 
3453 4563 8807 0419

Получить больше номеров кредитных карт? (n вместо нет): конечно

может ли кто-нибудь предложить способ сделать цикл do-while? заранее спасибо

я отредактировал код теперь, когда он выполняет повторяющуюся часть по какой-то причине, когда я ввожу нет, процесс не завершается

что-то типа:

Пожалуйста, введите ID эмитента: 321321 Пожалуйста, введите номер счета: 654654654 Полный номер из вашего ввода: 3213 2165 4654 6549
Пожалуйста, введите размер массива: 7 Пожалуйста, введите ID эмитента: 789789 Кредитная карта # 0:

7897 8985 6852 9257
Кредитная карта № 1:

7897 8917 0678 9958
Кредитная карта № 2:

7897 8900 5781 0934
Кредитная карта № 3:

7897 8949 2244 6098
Кредитная карта № 4:

7897 8941 3828 4895
Кредитная карта № 5:

7897 8965 9233 5006
Кредитная карта № 6:

7897 8981 8442 5880

Get more credit card numbers? (n for no):n
Get more credit card numbers? (n for no):n
Get more credit card numbers? (n for no):no
Get more credit card numbers? (n for no):

как вы можете видеть, когда я ввожу нет, он продолжает повторять одно и то же предложение, я хочу, чтобы оно повторялось от ввода предложения размера массива, как я могу это сделать?


person user1787811    schedule 18.11.2012    source источник
comment
System.out.printf разве это не исключение?   -  person Mordechai    schedule 18.11.2012


Ответы (2)


Я не уверен, что вы ожидаете в качестве вывода этой программы. Поскольку вы спросили об ошибке компиляции, я отредактировал ваш код и удалил две ошибки компиляции.

  1. cred1 не определен в TryAnother(). Следовательно, вы должны передать его как параметр. Вот так TryAnother(CreditCardNumber[] cred1)
  2. В методе TryAnother() вы поместили оператор return true рядом с блоком if, но перед циклом do-while. Это приведет к ошибке компиляции недостижимого оператора, поскольку после выполнения оператора return в методе дальнейшее выполнение не выполняется. Таким образом, вы должны поместить оператор return true после цикла do-while.

Вот исправленный код.

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); // pass variable cred1 as a parameter }

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) // pass cred1 as a parameter { String s; System.out.printf("Get more credit card numbers? (n for no):"); s = scanner.next(); if(s.charAt(0) != 'N' || s.charAt(0) != 'n') { do {
cred1 = getInputArray(); }while(s.charAt(0) != 'N' || s.charAt(0) != 'n'); } return false; // put the return statement here }

}

// A dummy class class CreditCardNumber{ String ID; String accNum; public CreditCardNumber(){ } public CreditCardNumber(String ID,String accNum){ this.ID = ID; this.accNum = accNum; } public void CreateCred(String tempID){ ID = tempID; } }

person Sajith Janaprasad    schedule 18.11.2012
comment
привет, что произойдет, если я хочу, чтобы сам метод tryAnother повторялся? Я также пытаюсь поместить оператор вызова TryAnother в цикл do-while, и он не завершит процесс, когда я отвечу «нет». - person user1787811; 18.11.2012
comment
Есть два способа повторить метод tryAnother. Во-первых, это рекурсия, а во-вторых, вызов метода tryAnother внутри цикла в другом методе. Я вижу, что вы приняли мой ответ, большое спасибо. Но я отредактировал свой ответ и не уверен, что вы приняли исходный или обновленный ответ. Я добавил оператор return true, потому что забыл его. Какую версию вы приняли? - person Sajith Janaprasad; 18.11.2012
comment
оригинальный я также внес некоторые изменения в него спасибо за помощь - person user1787811; 18.11.2012
comment
Пожалуйста. Я отменил изменения, и теперь отображается исходный ответ. - person Sajith Janaprasad; 18.11.2012

Вы должны определить cred1 как глобальный статический метод вне процедуры main.

Или передать cred1 в качестве параметра в getInputArray(...), которые, в свою очередь, передают их дальше, в TryAnother(...).

person Mordechai    schedule 18.11.2012
comment
Я не могу этого сделать, потому что в задании было указано, что единственной переменной области класса является объект Scanner для System.in, иначе я бы сделал это - person user1787811; 18.11.2012