2017-09-17 18 views
0

メッセージと入力の式、ifelse、変数、およびダイアログボックスを使用して、Mannings Calculatorを川の流れに対して複製するクラス用のプログラムを作成しています。私は、プログラム、すなわち式、変数、いくつかのifelse文を作成しましたが、JOptionPaneメッセージボックスとしてresultMessage変数を表示することに関連する問題があります。これは私のタイトルで述べたように、エラーメッセージを与えているタイプの不一致:JavaのVoidからStringに変換できない

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

:私は、これは、それがどのように見えるかで、いくつかの文字列が混在する複数のDouble型変数からの出力を連結しています。私はこれを引き起こす原因がわかりません。これはコード内で唯一連結されたセクションであり、私はすぐにこれを入力したいので、後でそれを心配する必要はありません。連結の変数の中には公式化されていないものもありますが、それでも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 ='部分は、コード行が実行されたときには関係しません。 –

関連する問題