2017-09-17 2 views
0

Ich erstelle ein Programm für die Klasse, das den Mannings-Rechner für den Fluss repliziert. Dabei werden Formeln, iselse, Variablen und Dialogfelder für Nachrichten und Eingaben verwendet. Ich habe das meiste des Programms erstellt, d. H. Die Formeln, Variablen, einige iffelse-Anweisungen, aber ich habe ein Problem, das sich auf das Anzeigen einer resultMessage-Variable als ein JOptionPane-Nachrichtenfeld bezieht. Ich verketten Ausgabe von mehreren Doppel Typ Variablen mit einigen Strings gemischt, das ist, wie es aussieht:Typenkonflikt: Konvertierung von leer in Zeichenfolge in Java nicht möglich

resultMessage=JOptionPane.showMessageDialog(null, "At a depth of "+enteredDepth+"ft the flow is "+ calculatedFlow+" cubic ft per second."+"\n"+ "Difference:"+difference); 

Dies wird mir die Fehlermeldung geben, wie im Titel angegeben. Ich bin mir nicht sicher, was das verursachen würde, es ist der einzige verkettete Abschnitt in meinem Code, ich wollte das schnell eingeben, damit ich mir später keine Sorgen machen muss. Einige der Variablen in der Verkettung wurden nicht formuliert, aber das sollte nicht den Fehler, IMO, werfen. Mein gesamtes Programm ist wie folgt:

import java.text.DecimalFormat; 
import javax.swing.JOptionPane; 

public class ManningCalculator { 

    public static void main(String[] args) { 

     DecimalFormat df=new DecimalFormat("##.00"); 

     //Assigned Constants 

     final double MANNING_COEFFICIENT = 1.486; 
     final double COEFFICIENT_BRICK = 0.015; 
     final double COEFFICIENT_CONCRETE=0.012; 
     final double COEFFICIENT_ASPHALT= 0.016; 
     final double COEFFICIENT_GRAVEL= 0.023; 
     final String MATERIAL_BRICK= "Brick"; 
     final String MATERIAL_CONCRETE="Concrete"; 
     final String MATERIAL_ASPHALT="Asphalt"; 
     final String MATERIAL_GRAVEL="Gravel"; 
     final double TOLERANCE= 0.01; 

     //input Variables 

     int attemptNumber; 
     double desiredFlow; 
     double maxDepth; 
     double width; 
     double roughnessCoefficient; 
     double deltaHeight=0; 
     double deltaLength=0; 
     double enteredDepth; 
     double calculatedFlow; 
     double difference; 
     double minError; 
     String resultMessage=""; 

     //Math variables 

     double channelVelocity=0; 
     double hydraulicRadius=0; 
     double channelArea=0; 
     double channelSlope=0; 
     double wettedPerimeter=0; 

     //JPane for input variables 

     desiredFlow=Double.parseDouble(JOptionPane.showInputDialog("Enter desired flow")); 
     maxDepth= Double.parseDouble(JOptionPane.showInputDialog("Enter the maximum depth")); 
     width= Double.parseDouble(JOptionPane.showInputDialog("Enter the width")); 
     roughnessCoefficient=Double.parseDouble(JOptionPane.showInputDialog("Enter choice for roughness coefficient:"+ 
      "\n"+"1 Brick"+"\n"+"2 Concrete"+"\n"+"3 Asphalt"+"\n"+"4 Gravel")); 
     deltaHeight=Double.parseDouble(JOptionPane.showInputDialog("Enter the change in channel height")); 
     deltaLength=Double.parseDouble(JOptionPane.showInputDialog("Enter the change in channel length")); 
     enteredDepth=Double.parseDouble(JOptionPane.showInputDialog("Attempt1"+"\n"+"Enter a depth:")); 


     //If else if statements 

     if(roughnessCoefficient==1) { 
      roughnessCoefficient=COEFFICIENT_BRICK; 
     }else if(roughnessCoefficient==2) { 
      roughnessCoefficient=COEFFICIENT_CONCRETE; 
     }else if(roughnessCoefficient==3) { 
      roughnessCoefficient=COEFFICIENT_ASPHALT; 
     }else { 
      roughnessCoefficient=COEFFICIENT_GRAVEL; 
     }; 

     if(desiredFlow<0) { 
      JOptionPane.showInputDialog("Desired flow must be greater than 0"); 
     }else { 
      JOptionPane.showMessageDialog(null, "Desired flow not valid."+"\n"+"The program terminates"); 
     }; 

     if(enteredDepth<0.0) { 
      if(enteredDepth>maxDepth) { 
       JOptionPane.showMessageDialog(null, "Entered depth is not valid."+"\n"+"Desired depth is set to 10.0"); 
       enteredDepth=maxDepth; 
      } 
     } 

     //Math Formulas 
     desiredFlow=channelVelocity * channelArea; 
     channelVelocity= (MANNING_COEFFICIENT /roughnessCoefficient) * 
       Math.pow(hydraulicRadius, (2/3)) *Math.pow(channelSlope, (1/2)); 
     hydraulicRadius =channelArea/wettedPerimeter; 
     channelSlope=deltaHeight/deltaLength; 


     resultMessage=JOptionPane.showMessageDialog(null, "At a depth of "+enteredDepth+"ft the flow is "+ 
       calculatedFlow+" cubic ft per second."+"\n"+ "Difference:"+difference); 

    System.exit(0); 

    } 
} 

Jede Hilfe mit diesem Problem würde sehr geschätzt werden.

+1

Bitte zeigen Sie den genauen Fehler, komplett mit Stack-Trace. Versuchen Sie auch, Ihren Code zu formatieren. Markiere es und drücke Strg + K während der Bearbeitung, um es für dich zu formatieren. – Carcigenicate

+0

Ich versuche, einen Screenshot des Fehlercodes hinzuzufügen, aber dieses Kommentarfeld lässt es nicht zu. – Jkeef

+0

Ich weiß auch nicht, was dieser STRG + K Befehl getan hat, aber alle anderen roten Zeilen, die ich in meinem Code hatte, sind jetzt weg? – Jkeef

Antwort

0

ändern

resultMessage = JOptionPane.showMessageDialog(null, "At a depth of + enteredDepth + "ft the flow is " + calculatedFlow + " cubic ft per second." + "\n" + "Difference:" + difference); 

zu

JOptionPane.showMessageDialog(null, "At a depth of " + enteredDepth + "ft the flow is " + calculatedFlow+" cubic ft per second." + "\n" + "Difference:" + difference); 

Das Problem JOptionPane.showMessageDialog ist hat keinen Rückgabewert (in parlance es einen void Rückgabetyp hat). Daher können Sie den Wert eines solchen Aufrufs keiner Variablen zuweisen.

+0

Also, die Verwendung dieser Methode wird das gleiche Ergebnis liefern, als wenn ich es auf die Variable (minus den Fehlercode), wie in, wird es immer noch durchgeführt werden, nachdem alle anderen Operationen abgeschlossen sind? – Jkeef

+0

@Jkeef: Es wird nach allen anderen Operationen abgeschlossen, weil es nach all den anderen Operationen erscheint. Eine Funktion/Methode in Java wird von oben nach unten ausgeführt (egal, welche Flusssteuerungsstrukturen dort existieren). Der 'resultMessage =' Teil der Zeile hat keinen Einfluss darauf, wann die Codezeile ausgeführt wird. –

Verwandte Themen