Значения полей суффикса, основанные на количестве вхождений в таблице

Проблема заключается в

Когда сканер закрыт, он закрывает свой входной источник, если источник реализует интерфейс Closeable.

blockquote>

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Scanner.html

Таким образом, scan.close() закрывает System.in.

Чтобы исправить это, вы можете сделать

Scanner scan static и не закрывать его в PromptCustomerQty. Код ниже работает.

public static void main (String[] args) {   

// Create a customer
// Future proofing the possabiltiies of multiple customers
Customer customer = new Customer("Will");

// Create object for each Product
// (Name,Code,Description,Price)
// Initalize Qty at 0
Product Computer = new Product("Computer","PC1003","Basic Computer",399.99); 
Product Monitor = new Product("Monitor","MN1003","LCD Monitor",99.99);
Product Printer = new Product("Printer","PR1003x","Inkjet Printer",54.23);

// Define internal variables 
// ## DONT CHANGE 
ArrayList ProductList = new ArrayList(); // List to store Products
String formatString = "%-15s %-10s %-20s %-10s %-10s %n"; // Default format for output

// Add objects to list
ProductList.add(Computer);
ProductList.add(Monitor);
ProductList.add(Printer);

// Ask users for quantities 
PromptCustomerQty(customer, ProductList);

// Ask user for payment method
PromptCustomerPayment(customer);

// Create the header
PrintHeader(customer, formatString);

// Create Body
PrintBody(ProductList, formatString);   
}

static Scanner scan;

public static void PromptCustomerQty(Customer customer, ArrayList ProductList)               {
// Initiate a Scanner
scan = new Scanner(System.in);

// **** VARIABLES ****
int qty = 0;

// Greet Customer
System.out.println("Hello " + customer.getName());

// Loop through each item and ask for qty desired
for (Product p : ProductList) {

    do {
    // Ask user for qty
    System.out.println("How many would you like for product: " + p.name);
    System.out.print("> ");

    // Get input and set qty for the object
    qty = scan.nextInt();

    }
    while (qty < 0); // Validation

    p.setQty(qty); // Set qty for object
    qty = 0; // Reset count
}

// Cleanup

}

public static void PromptCustomerPayment (Customer customer) {
// Variables
String payment = "";

// Prompt User
do {
System.out.println("Would you like to pay in full? [Yes/No]");
System.out.print("> ");

payment = scan.next();

} while ((!payment.toLowerCase().equals("yes")) && (!payment.toLowerCase().equals("no")));

// Check/set result
if (payment.toLowerCase() == "yes") {
    customer.setPaidInFull(true);
}
else {
    customer.setPaidInFull(false);
}
}

На боковой ноте вы не должны использовать == для сравнения строк, вместо этого используйте .equals.

2
задан Lee Mac 11 March 2019 в 19:11
поделиться

1 ответ

Без первичного ключа:

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

  • Откройте IDE VBA, используя Alt + F11
  • Вставьте новый общедоступный модуль Alt + I , M
  • Скопируйте следующий базовый код в новый модуль:

    Function Occurrence(Optional strVal As String) As Long
        Static lngTmp As Long
        Static strTmp As String
        If strTmp = strVal Then
            lngTmp = lngTmp + 1
        Else
            lngTmp = 1
            strTmp = strVal
        End If
        Occurrence = lngTmp
    End Function
    
  • В MS Access, создайте новый запрос со следующим SQL, заменив YourTable именем вашей таблицы:

    update (select t.layout_desc from YourTable as t order by t.layout_desc) q
    set q.layout_desc = q.layout_desc & occurrence(q.layout_desc)
    

С первичным ключом:

Если ваша таблица должна была включать первичный ключ, скажем, id, типа данных Long Integer, вы можете использовать функцию агрегирования домена DCount следующим образом:

update YourTable t
set t.layout_desc = t.layout_desc & 
dcount("*","YourTable","layout_desc = '" & t.layout_desc & "' and id <= " & t.id)
0
ответ дан Lee Mac 11 March 2019 в 19:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: