2017-09-17 297 views
0

我正在使用公式,ifelse,变量和对话框为消息和输入复制Mannings Calculator for river flow类。我创建了大部分程序,即公式,变量,一些ifelse语句,但是我有一个与显示resultMessage变量作为JOptionPane消息框相关的问题。我串接输出一些字符串混合几种双师型变量,这是它的样子:类型不匹配:无法在Java中将void从void转换为String

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

这是给我的错误信息,如标题所述。我不确定什么会导致这种情况,它是我的代码中唯一的连接部分,我希望能够快速输入,因此不用担心后面的问题。串联中的一些变量尚未制定,但仍不应该抛出错误,IMO。我的整个计划如下:

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); 

    } 
} 

任何有关这个问题的帮助将不胜感激。

+1

请显示确切的错误,并附有堆栈跟踪。另外,请尝试格式化您的代码。突出显示它,并在编辑时按ctrl + k让它为你设置格式。 – Carcigenicate

+0

我正在尝试添加错误代码的屏幕快照,但此评论框不允许我使用。 – Jkeef

+0

另外,我不知道CTRL + K命令做了什么,但是我的代码中的其他红线现在都消失了吗? – Jkeef

回答

0

变化

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

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

问题是JOptionPane.showMessageDialog没有返回值(在说法它有一个void返回类型)。因此,您不能将此类调用的值分配给变量。

+0

因此,使用这种方法会产生相同的结果,就像我将它设置为变量(减去错误代码)一样,在所有其他操作完成后它仍会最后执行? – Jkeef

+0

@Jkeef:它会在所有其他操作之后完成,因为它在所有其他操作之后出现。 Java中的函数/方法从上到下运行(服从那里存在的任何流控制结构)。该行的'resultMessage ='部分与执行代码行时没有关系。 –

相关问题