2016-05-03 9 views
0

Szenario 1: Der Benutzer wird nach einer 5-stelligen Eingangsnummer und einem 3-stelligen Code gefragt. Diese werden dann im Dateinamen und in der Datei ersetzt.Eine Bedingung mit einem Eingang einschließen

Szenario 2: Der Benutzer wird nach einer 5-stelligen Eingangsnummer und dann nach gefragt, wenn er den 3-stelligen Code eingeben/ändern möchte. Wenn ja, können sie einen 3-stelligen Code eingeben.

Aktuelle Code:

package blah blah 

import all stuffs... 

public class NumbChanger{ 

public static void main(String[] args) { 
    try { 
     Scanner user = new Scanner(System.in); 
     String inputCode= ""; 
     System.out.print("Enter a xml file directory: "); // Enter xml file directory. 
     String directory = user.nextLine(); 

     System.out.print("Enter the 5 digit starting Number: "); 
     int inputNumber = user.nextInt(); 

     System.out.print("Do you want to change the code?"); 
     boolean yesChange = user.hasNext(); 
     if (!yesChange){ 

     } else { 
      System.out.print("Enter the 3 character Code: "); 
      inputCode = user.next(); 
     } 

     user.close(); 

     Path folder = Paths.get(directory); 

     FilenameFilter xmlFilter = new FilenameFilter() { 
      public boolean accept(File dir, String name) { 
       String lowercaseName = name.toLowerCase(); 
       if (lowercaseName.endsWith(".xml")) { 
        return true; 
       } else { 
        return false; 
       } 
      } 
     };  
     //this is the list of files 
     File[] allFiles = folder.toFile().listFiles(xmlFilter); 

     if (allFiles == null) { 
      throw new IOException("No files found"); 
     } 

     String fileName;   
     for(File aFile : allFiles) { 

      if (aFile.isFile()) { 
       fileName = aFile.getName(); 

       String oldNumber = fileName.substring(
         ((fileName.lastIndexOf(".")) - 12), (fileName.lastIndexOf(".")) - 4); 

       String oldCode = fileName.substring(
         ((fileName.lastIndexOf(".")) - 3), (fileName.lastIndexOf("."))); 

       if (!yesChange){ 

       } else { 
        inputCode = fileName.substring(
          ((fileName.lastIndexOf(".")) - 3), (fileName.lastIndexOf("."))); 
       } 

       String newNumber = String.valueOf(inputNumber++); 

       String newFileName = fileName.replaceAll(
         oldNumber, newNumber); 
       if (!yesChange){ 

       } else { 
        newFileName = newFileName.replaceAll(oldCode, inputCode); 
       } 
       //renaming the file 
       Path newFilePath = Files.move(aFile.toPath(), 
         aFile.toPath().resolveSibling(newFileName)); 

       //replacing the entry # within the XML 
       String content = new String(Files.readAllBytes(newFilePath), 
         StandardCharsets.UTF_8); 
       content = content.replaceAll(oldNumber, newNumber); 
       content = content.replaceAll(oldCode, inputCode); 
       Files.write(newFilePath, content.getBytes(StandardCharsets.UTF_8)); 
      } 

     } 
     System.out.print(allFiles.length + " xml files were changed."); 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } finally { 
     System.out.println(" Good Job!"); 
     System.exit(0); 
    } 
} 

}


Reflexion über obigen Code.

Derzeit mache ich es funktioniert, wenn sie Werte für beide eingeben. Wo gehe ich falsch?

Weitere Verbesserungen: Überprüfen Sie die Länge des Codes.

Ich verstehe, ich kann ein einfaches tun

if (inputCode.length == 3){ 
} 
else { 
System.out.print ln ("Error") 
} 

Aber Im nicht mit booleans und While-Schleifen eingeweiht und wenn der Benutzer einen anderen Wert eingibt Ich mag, dass sie wieder zu veran im Vergleich mit wieder das Programm auszuführen.

danke im voraus! :)

Antwort

1

Ich bin nicht sicher, ob ich verstehe Ihre Frage, aber würde den Job nicht

System.out.print("Enter the 5 digit starting Number: "); 
int inputNumber = user.nextInt(); 
while(String.valueOf(inputNumber).length() != 5) { 
    System.out.println("Please enter a 5 digit number."); 
    inputNumber = user.nextInt(); 
} 

tun? Wenn die Nummer nicht 5 Ziffern lang ist, wird der Benutzer aufgefordert, einen neuen einzugeben.

Sie können .length() auf Integer nicht verwenden, Sie müssen es also zuerst in einen String konvertieren. Daher die Linie

String.valueOf(inputNumber).length() 
+0

Hey Helliaca! Dies löst das Längenproblem. Wie lösen Sie die "fragen Benutzer, wenn sie Code ändern möchten" und dann fortfahren, es Problem auf der Grundlage der Antwort zu ändern? Der aktuelle Code kann den 3-stelligen Code ändern. Es kann jedoch basierend auf Benutzereingaben nicht ein- und ausgeschaltet werden. – Dasman