Avatar billede OBS Juniormester
23. maj 2025 - 13:55 Der er 34 kommentarer

Programmering: Produktmixoptimering

Jeg har lavet programmering inddelt i 6 klasser. Jeg har en klasse: public class ProductMiixGUI extends JFrame{

private void optimize() {
try {
      String inputText =  maxQuantityField.get Text().trim();
      if (inputText.isEmpty() {
      JOptionPane.showMessageDialog(this, " Please enter a maximum quantity." , "Input Required", JOptionPane.WARNING_MESSAGE);
return;
}
int maxQuantity;
try {
      maxQuantity = Integer.parseInt(inputText);
} catch ( NumberFormatException e ) {
    JOptionPane.showMessageDialog(this, "Please enter a valid integer for maximum quantity.", "Invalid Input" , JOptionPane.ERROR_MESSAGE);
return;
}

if /maxQuantity <= 0 ) {
    JOptionPane.showMessageDialog( this, " Max quantity must be a positive integer." , "Invalid Input" , JOptionPane.WARNING_MESSAGE);
return;
}

// Kald optimeringsmetoden
productMix.optimizeMix(maxQuantity);

// Opdater  UI
updateTable();
totalValueLabel.setText( String.format ( " Total Value (USD) : %.2f " , productMix.calculateTotalValue())) ;

} catch ( Exception e ) {

  // Generel fejlbehandling
      JOptionPane.showMessageDialog( this, " An error occurred during optimization: " + e.getMessage() , "Error" , JOptionPane.ERROR_MESSAGE);
}
}
Derudover er der importExcel og exportExcel og de fungerer  fint.

Når programmet køres, vises " Max quantity must be a positive integer."  Mit spørgsmål: Hvad mangler i programmeringen, er der fejl i programmeringen ?
Avatar billede erikjacobsen Ekspert
23. maj 2025 - 16:54 #1
Den her ser underlig ud:

  if /maxQuantity <= 0 ) {

Det skal vel være

  if (maxQuantity <= 0 ) {
Avatar billede OBS Juniormester
23. maj 2025 - 16:58 #2
Ja det er en skrivefejl
Avatar billede erikjacobsen Ekspert
23. maj 2025 - 17:09 #3
Det kan ikke være en skrivefejl - du må jo have kopieret koden ind fra dine .java-filer. Hvis du har rettet til, fjernet noget, ændret noget, så spilder vi jo vores tid på at finde fejl.

Hvad er præcis den koder, hvor det går galt?
Avatar billede OBS Juniormester
23. maj 2025 - 17:23 #4
Det er indtastningsfejl, jeg har hverken fjernet noget eller ændret noget
Avatar billede erikjacobsen Ekspert
23. maj 2025 - 17:41 #5
Jamen, det kan slet ikke oversættes. Kopier teksten Copy/Paste, og lad os se den. Der er flere ting


Der er ikke mellemrum i getText():

  String inputText =  maxQuantityField.get Text().trim();

Der mangler en højreparentes:

  if (inputText.isEmpty() {

Vis os den præcise kode, der går galt.
Avatar billede OBS Juniormester
23. maj 2025 - 17:57 #6
Her en kopi:
private void optimize() {
       
            try {
                String inputText = maxQuantityField.get Text().trim();
                if (inputText.isEmpty()) {
                    JOptionPane.showMessageDialog(this, "Please enter a maximum quantity.", "Input Required", JOptionPane.WARNING_MESSAGE);
                    return;
                }

                int maxQuantity;
                try {
                    maxQuantity = Integer.parseInt(inputText);
                } catch (NumberFormatException e) {
                    JOptionPane.showMessageDialog(this, "Please enter a valid integer for maximum quantity.", "Invalid Input", JOptionPane.ERROR_MESSAGE);
                    return;
                }

                if (maxQuantity <= 0) {
                    JOptionPane.showMessageDialog(this, "Max quantity must be a positive integer.", "Invalid Input", JOptionPane.WARNING_MESSAGE);
                    return;
                }

                // Kald optimeringsmetoden
                productMix.optimizeMix(maxQuantity);
                // Opdater UI
                updateTable();
                totalValueLabel.setText(String.format("Total Value (USD): %.2f", productMix.calculateTotalValue()));

            } catch (Exception e) {
                // Generel fejlbehandling
                JOptionPane.showMessageDialog(this, "An error occurred during optimization: " + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
Avatar billede erikjacobsen Ekspert
23. maj 2025 - 18:03 #7
Det er ikke den kode, der kører. Det kan ikke oversættes.

Prøv at lave om i fejlbeskeden, f.eks.

  JOptionPane.showMessageDialog(this, "7913 Max quantity  ..........

og se om du efterfølgende rent faktisk får beskeden med "7913".
Avatar billede OBS Juniormester
23. maj 2025 - 18:31 #8
Jeg prøvede at lave om i fejlbeskeden: "7913  Max quantity must be a positive integer."  og  efterfølgende  er 7913 ikke med.

( Jeg er endnu ikke helt indforstået med det sprog, der anvendes i  kodeverdenen. Hvad menes med : " Det er ikke den kode, der kører. Det kan ikke oversættes" ? )
Avatar billede erikjacobsen Ekspert
23. maj 2025 - 18:45 #9
Der er syntaksfejl - derfor vil et forsøg på at oversætte det gå galt.

Jeg ved ikke hvordan du afvikler dine Java-programmer. Jeg kender ikke noget til IDE-er (Eclipse, Visual Studio).
Avatar billede OBS Juniormester
23. maj 2025 - 19:14 #10
Jeg bruger følgende:    import javax.swing.SwingUtilities;


public class ProductMixOptimizerWithGUI {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
       
        SwingUtilities.invokeLater(()->{
           
            ProductMixGUI gui=new ProductMixGUI();
            gui.setVisible(true);
           
        });

    }


}
Avatar billede erikjacobsen Ekspert
23. maj 2025 - 19:26 #11
Jeg kan ikke forklare hvorfor dit uviklingssystem ikke vil kigge på den .java-fil.

Hvad bruger du? Måske andre kan.
Avatar billede OBS Juniormester
23. maj 2025 - 19:43 #12
Jeg bruger  Eclipse
Avatar billede OBS Juniormester
24. maj 2025 - 13:25 #13
Det lykkedes mig at lave om i fejlbeskeden: "7913 Max quantity must be a positive integer ".
Avatar billede erikjacobsen Ekspert
24. maj 2025 - 14:21 #14
Så du er sikker på at den fejlbesked kommer fra den kode du har vist os her?
Avatar billede OBS Juniormester
24. maj 2025 - 14:31 #15
Ja, clean projektet - Run  As - Java Appilcation og fejlbeskeden "7913 Max quantity must be a positiv integer"  kommer frem.
Avatar billede OBS Juniormester
24. maj 2025 - 14:46 #16
Ja, jeg har ændret lidt i fejlbeskeden  - og det fungerer.
Avatar billede erikjacobsen Ekspert
24. maj 2025 - 15:34 #17
Som if-sætningen står, så får du beskeden ved indtastning af negative tal, og ved nul, men taster du et positivt tal ind, så får du ikke beskeden. Så ... hvad gør du?
Avatar billede OBS Juniormester
24. maj 2025 - 15:57 #18
Ved indtastning af negative tal og ved nul og indtastning af positive tal får jeg fejlbeskeden: " Max quantity must be a positive integer".  ( Indtastning af denne positive tal skal være lig summen af Quantity ). Tom indtastningsfelt fungerer: " Please enter a maximum quantity"  . Så, jeg kan ikke komme videre, desværre.
Avatar billede erikjacobsen Ekspert
24. maj 2025 - 16:16 #19
maxQuantity er en int. Hvis den er positiv kan den ovenfor viste besked om "...positive integer" ikke blive vist, på grund af if-sætningen.

Dette kan ikke være den kode, der køres.
Avatar billede OBS Juniormester
24. maj 2025 - 17:00 #20
Kopi af en del af  private void optimize:
private void optimize() {
            try {
                String inputText = maxQuantityField.getText().trim();
                if (inputText.isEmpty()) {
                    JOptionPane.showMessageDialog(this, "Please enter a maximum quantity.", "Input Required", JOptionPane.WARNING_MESSAGE);
                    return;
                }
               
                int maxQuantity = parseMaxQuantity(inputText);
             
                if (maxQuantity <=0) {
                    JOptionPane.showMessageDialog(this, "79130Max quantity must be a positive integer.", "Invalid Input", JOptionPane.WARNING_MESSAGE);
                    return;
                }
og når programmet køres  (og jeg har indtastet en positiv tal, ) får jeg fejlbeskeden "79130Max quantity must be a positive integer".  Jeg kan desværre ikke vise skærmbilledet. Alternativt kan jeg sende skærmbilledet til din  email.
Avatar billede erikjacobsen Ekspert
24. maj 2025 - 17:46 #21
Hvis den kommer ind i if-sætningen med "79130Max ..." når du taster 117 ind, så må der være en fejl i parseMaxQuantity (som du ikke havde før).
Avatar billede OBS Juniormester
24. maj 2025 - 18:03 #22
Så hvad er dit forslag ?
Avatar billede erikjacobsen Ekspert
24. maj 2025 - 18:23 #23
Måske vi skal se parseMaxQuantity ?
Avatar billede OBS Juniormester
24. maj 2025 - 18:34 #24
Ja, hvordan ?
Avatar billede OBS Juniormester
24. maj 2025 - 18:45 #25
Altså: hvordan kan vi analyse / bearbejde den maximale mængde ??
Avatar billede erikjacobsen Ekspert
24. maj 2025 - 19:01 #26
Vi kan måske se på koden om der er en åbenlys fejl.

Eller udskrive maxQuantity. så du kan se hvilken værdi den har.
Avatar billede OBS Juniormester
24. maj 2025 - 19:45 #27
Jo, prøv om der er åbenlys fejl på koden
Avatar billede erikjacobsen Ekspert
24. maj 2025 - 20:00 #28
Så må vi lige se hvordan parseMaxQuantity ser ud.
Avatar billede OBS Juniormester
24. maj 2025 - 20:12 #29
ok
Avatar billede arne_v Ekspert
25. maj 2025 - 17:24 #30
Programmeringsproblemer løses sjældent ved geniale indfald men typisk via hårdt arbejde.

Du putter et større antal System.out.print* ind i koden så du kan følge hvad der sker. Så kører du den og kigger på det debug output og på et tidspunkt så "åh - det var der derfor".

Alternativt kan du bruge debuggeren. Eclipse virker med debugger. Jeg har dog aldrig selv brugt den.

Ved mere seriøs brug skulel du nok skifte til at bruge et logging framework f.eks. det indbyggede i Java. Så kan du nemt slå debug output fra og til.
Avatar billede OBS Juniormester
26. maj 2025 - 17:22 #31
Jeg fandt frem til følgende:  double maxQuantity = Double.parseDouble(maxQuantityField.getText());  if (maxQuantity <= 0) . System.out.println ("Calling optimizeMix with maxQuantity: " + maxQuantity); og når jeg skriver et tal i indtastningsfeltet, f.eks. 405, og trykker på knappen Optimize, får jeg i konsollen : " Calling optimizeMix with maxQuantity: 405.0.  "  Men selve  Optimize-delen  fungerer ikke.  Så der er lang vej endnu.
Avatar billede arne_v Ekspert
26. maj 2025 - 20:14 #32
Har du algoritmen for den optimering klar? =kan du lave optimeringen med papir og blyant?
Avatar billede OBS Juniormester
27. maj 2025 - 13:59 #33
Ja, jeg har for public void optimizeMix(double maxQuantity) lavet med papir og blyant.
Avatar billede OBS Juniormester
27. maj 2025 - 18:32 #34
Jeg må have en længere  pause.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester