#Generating UserID bug

1 messages ยท Page 1 of 1 (latest)

austere birchBOT
#

<@&987246487241105418> please have a look, thanks.

#

Here is an AI assisted attempt to answer your question ๐Ÿค–. Maybe it helps! In any case, a human is on the way ๐Ÿ‘. To continue talking to the AI, you can use </chatgpt:1108714622413963314>.

#

; // Default prefix is an empty string
if (power.equals("admin")) {
prefix = "ADM";
} else if (power.equals("user")) {
prefix = "USR";
}

    try {
        File file = new File(textfile);
        Scanner scanner = new Scanner(file);

        while (scanner.hasNextLine()) {
            String line = scanner.nextLine();
            if (line.startsWith(prefix)) {
                String userIDString = line.substring(3);
                int userID = Integer.parseInt(userIDString);
                if (userID >= nextUserID) {
                    nextUserID = userID + 1;
                }
            }
        }

        scanner.close();
    } catch (FileNotFoundException e) {
        System.out.println("File not found");
    }

    String userIDString = String.format("%03d", nextUserID);
    return prefix + userIDString;
}
#

The bug in this code is that it does not handle the case when there are no existing user IDs with the given prefix. In such cases, the method will return a user ID with a prefix but without any number, resulting in an invalid user ID.

To fix this bug, we can add a check after the while loop to see if `nextUserID` is still equal to 1. If it is, we can set `nextUserID` to 1 and append "001" to the prefix.

Here's the updated code:

#

java
public static String getUserIDForGeneratingUserID(String textfile, String power) {
int nextUserID = 1; // Default starting value is 001
String prefix = "";

if (power.equals("admin")) {
    prefix = "ADM";
} else if (power.equals("user")) {
    prefix = "USR";
}

try {
    File file = new File(textfile);
    Scanner scanner = new Scanner(file);

    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();
        if (line.startsWith(prefix)) {
            String userIDString = line.substring(3);
            int userID = Integer.parseInt(userIDString);
            if (userID >= nextUserID) {
                nextUserID = userID + 1;
            }
        }
    }

    scanner.close();
} catch (FileNotFoundException e) {
    System.out.println("File not found");
}

if (nextUserID == 1) {
    return prefix + "001";
}

String userIDString = String.format("%03d", nextUserID);
return prefix + userIDString;

}

#

Now, if there are no existing user IDs with the given prefix, the method will return a valid user ID with the prefix and "001" as the number.```
sharp plume
#

hello, this is one method of registering users, when registering, it will read the text file beforehand, then accordingly an ID for each role will be generated, for example, if there are none, for vendor it will be VD001, if there are 3 vendors already in the text file, it will be VD004, however upon registering it keeps use the VD001 everytime, for every role its the same bug, much help appreciated, thank you

#

`
CT001,hung,qwerty,Customer,0.0

RN001,ric,789789,Runner,0.0

VD001,adminrunner,runnqwe,Vendor,0.0

RN001,adminrunnnering,777,Runner,0.0

RN001,adminn,12345,Runner,0.0

RN001,kelvin,runner,Runner,0.0

VD001,ffffffff,fffff,Vendor,0.0

RN001,yomaa,123,Runner,0.0

RN001,giraffe,runner123,Runner,0.0

RN001,girafafe,12345,Runner,0.0

VD001,123,asd,Vendor,0.0

VD001,1234,1234,Vendor,0.0
`
above is the text file written into

sharp plume
#
public static String readUserID (String textfile, String power) {   
                ArrayList<Integer> ids = new ArrayList<>();
                    try (BufferedReader bf = new BufferedReader (new FileReader(textfile))) {
                            String line;
                        while ((line = bf.readLine()) != null) {
                                String idPart = line.substring(2); // Get substring starting from index 2
                                ids.add(Integer.parseInt(idPart));
                        }
                    } catch (IOException | NumberFormatException ex) {
                            ex.printStackTrace(); // Handle exceptions (file not found, format issues, etc.)
                            System.out.println("Failed to read file correctly!");
                    }
                    
                    // Determine the next available ID for the given power
                    int nextUserID = 1; // Default starting value is 001
                    if (!ids.isEmpty()) {
                        int maxID = Collections.max(ids); // Get the maximum ID from the collected IDs
                        nextUserID = maxID + 1; // Increment the maximum ID for the next available ID
                        System.out.println(ids);
                    } else {
                        System.out.println(ids);
                    }                

                    String prefix = ""; // Determine prefix based on user power (Vendor(VD), Customer(CT), Runner(RN))             
                        switch (power) {
                            case "Vendor":
                            prefix = "VD";
 break;
 case "Customer":
      prefix = "CT";break;
case "Runner":
          prefix = "RN";break;       default:System.out.println("Role not available");                            break;                        }return prefix + String.format("%03d", nextUserID);
        }
       ```
austere birchBOT
# sharp plume ```java public static String readUserID (String textfile, String power) { ...

Detected code, here are some useful tools:

Formatted code
public static String readUserID(String textfile, String power) {
  ArrayList<Integer> ids = new ArrayList<>();
  try (BufferedReader bf = new BufferedReader(new FileReader(textfile))) {
    String line;
    while ((line = bf.readLine()) != null ) {
      String idPart = line.substring(2);
      // Get substring starting from index 2
      ids.add(Integer.parseInt(idPart));
    }
  } catch (IOException | NumberFormatException ex) {
    ex.printStackTrace();
    // Handle exceptions (file not found, format issues, etc.)
    System.out.println("Failed to read file correctly!");
  }
  // Determine the next available ID for the given power
  int nextUserID = 1;
  // Default starting value is 001
  if (!ids.isEmpty()) {
    int maxID = Collections.max(ids);
    // Get the maximum ID from the collected IDs
    nextUserID = maxID + 1;
    // Increment the maximum ID for the next available ID
    System.out.println(ids);
  }
  else {
    System.out.println(ids);
  }
  String prefix = "";
  // Determine prefix based on user power (Vendor(VD), Customer(CT), Runner(RN))             
  switch (power) {
    case "Vendor" : prefix = "VD";
    break ;
    case "Customer" : prefix = "CT";
    break ;
    case "Runner" : prefix = "RN";
    break ;
    default  : System.out.println("Role not available");
    break ;
  }
  return prefix + String.format("%03d", nextUserID);
}