Der Teil des Programms, den ich erstelle, erfordert eine Überprüfung, ob die gleiche Zeichenfolge (ID des Produktcodes) bereits in eine Textdatei geschrieben wurde. Damit wird verhindert, dass dieselbe ID zweimal geschrieben wird.Laufzeitfehler beim Übergeben der Zeichenfolge in die boolesche Funktion zum Durchsuchen der Datei nach einer identischen Zeichenfolge
Ich verwende eine boolesche Methode, die eine Zeichenfolge von der GUI-Benutzereingabe übergibt und dann mit jeder bereits vorhandenen Zeile in der Datei vergleicht.
Die Methode ist unten.
public boolean hasIDAlreadyBeenUsed(String IDBeingTested) {
boolean Decision = false;
String ID = "Product ID: "+IDBeingTested;
BufferedReader theBR;
Scanner scanner;
String scannedString;
try {
theBR = new BufferedReader(new FileReader("ProductData.txt"));
scanner = new Scanner(new File("ProductData.txt"));
while (scanner.hasNextLine()) {
scannedString = scanner.nextLine();
String character = scanner.findInLine(ID);
if ((character) == (ID)) {
Decision = true;
System.out.println("they are a match: " + ID);
} else {
Decision = false;
}
}
theBR.close();
theBR = null;
} catch (IOException ioe) {
Decision = false;
System.out.println(ioe);
}
return Decision;
}
wenn die boolean ein false zurückgibt, werden die Daten in die Datei geschrieben werden, wenn es erscheint und keine Daten geschrieben liefert einen wahren eine Fehlermeldung.
Unten ist der Code, der auf dem booleschen Ausgang beruht.
private void jAddProductToDatabseButtonActionPerformed(java.awt.event.ActionEvent evt) {
if (!product.hasIDAlreadyBeenUsed(jProductIDTextField.getText())) {
try {
BufferedWriter ProductFileWriter = new BufferedWriter(new FileWriter("ProductData.txt", true));
ProductFileWriter.write("Product Name: " + jProductNameTextField.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("Product ID: " + jProductIDTextField.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("Product Weight: " + jProductWeightTextField.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("Product Selling Price (£): " + jProductSellingPriceTextField.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("Product Image File Name: " + jNameOfImageFileTextField.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("Product Manufacturer Address: " + jManufacturerAddressTextArea.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("Product Type: " + jProductTypeTextField.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("Product Unit Cost: " + jProductUnitCostTextField.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("Product Delivery Time: " + jProductDeliveryTimeTextField.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("Product Shelf Life: " + jProductShelfLifeTextField.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("Product Stock Level: " + jInitialStockLevelTextField.getText() + System.getProperty("line.separator"));
ProductFileWriter.write("==============================" + System.getProperty("line.separator"));
ProductFileWriter.flush();
ProductFileWriter.close();
ProductFileWriter = null;
}
catch (IOException ioe) {}
}
else {
JOptionPane.showMessageDialog(null, "Cannot input, ID HAS ALREADY BEEN USED", "Incorrect ID", JOptionPane.ERROR_MESSAGE);
}
}
Die else-Anweisung wird jedoch nie ausgeführt, auch wenn die gleiche Zahl, z. B. 44, mehrmals als ID eingegeben wurde.
Ich benutzte sogar dieses Innere, um zu zeigen, dass die Saiten die gleichen waren. und die gleiche Zeichenfolge wird zweimal erzeugt.
while (scanner.hasNextLine()) {
scannedString = scanner.nextLine();
String character = scanner.findInLine(ID);
System.out.println(scannedString);
System.out.println("Product ID: " + ID);
Bitte lesen Sie [Unter welchen Umständen kann ich „dringend“ oder andere Ähnliche Ausdrücke auf meine Frage hinzufügen, um schnelle Antworten zu erhalten? ] (// meta.stackoverflow.com/q/326569) - die Zusammenfassung ist, dass dies keine ideale Möglichkeit ist, Freiwillige anzusprechen, und ist wahrscheinlich kontraproduktiv, um Antworten zu erhalten. Bitte unterlassen Sie das Hinzufügen zu Ihren Fragen. – halfer
daran in Zukunft tragen wird :) – giddian