【问题标题】:Arrays, Doubles, IF/Else数组、双精度、IF/Else
【发布时间】:2013-10-24 11:58:11
【问题描述】:

我假设使用数字数组编写代码,显然不是字符串,它们需要是双精度的。我编写代码的方式,我知道的唯一方式,是有效的。也许我让它太复杂了,一个数组会让它变得简单 idk。我是编程新手,几天后又是新手。请帮忙。

需要的是: 编写一个代码,平均输入 10 个数字,并显示平均值以及它们是通过还是失败。如果 50 通过。

我们必须使用一个数组,我们需要使用JOptionPane.showMessageDialog.,数字需要双精度并四舍五入到两位小数。

我声明了双倍,但如果我输入十进制数字,则会出现错误。如果我只是按原样运行代码,它将让我输入 10 个数字,对它们进行平均,然后告诉我是通过还是失败。我只是在使用其他因素时迷失了方向。谢谢

工作代码如下:

package avgpassorfail;


import javax.swing.JOptionPane;

public class Avgpassorfail {

public static void main(String[] args) {

   String firstNumber, 
     secondNumber, 
     thirdNumber,
     fourthNumber,
     fifthNumber,
     sixthNumber,
     seventhNumber,
     eighthNumber,
     ninethNumber,
     tenthNumber;

double number1,     
number2,
number3,
number4,
number5,
number6,
number7,
number8,
number9,
number10,
sum;                

    firstNumber =
    JOptionPane.showInputDialog ( "Enter 1st Grade" );

    secondNumber =
    JOptionPane.showInputDialog ( "Enter 2nd Grade" );

    thirdNumber =
    JOptionPane.showInputDialog ( "Enter 3rd Grade" );

    fourthNumber =
    JOptionPane.showInputDialog ( "Enter 4th Grade" );

    fifthNumber =
    JOptionPane.showInputDialog ( "Enter 5th Grade" );

    sixthNumber =
    JOptionPane.showInputDialog ( "Enter 6th Grade" );

    seventhNumber =
    JOptionPane.showInputDialog ( "Enter 7th Grade" );

    eighthNumber =
    JOptionPane.showInputDialog ( "Enter 8th Grade" );

     ninethNumber =
     JOptionPane.showInputDialog ( "Enter 9th Grade" );

     tenthNumber =
     JOptionPane.showInputDialog ( "Enter 10th Grade" );


number1 = Integer.parseInt ( firstNumber);
number2 = Integer.parseInt ( secondNumber);
number3 = Integer.parseInt ( thirdNumber);
number4 = Integer.parseInt ( fourthNumber);
number5 = Integer.parseInt ( fifthNumber);
number6 = Integer.parseInt ( sixthNumber);
number7 = Integer.parseInt ( seventhNumber);
number8 = Integer.parseInt ( eighthNumber);
number9 = Integer.parseInt ( ninethNumber);
number10 = Integer.parseInt ( tenthNumber);


sum = (number1 + number2 + number3 + number4 + number5 + number6 + number7 + number8 +number9 + number10)/10;


JOptionPane.showMessageDialog (
null, "The Average is " + sum, "Results",
JOptionPane.PLAIN_MESSAGE);

if (sum < 50){
JOptionPane.showMessageDialog (
null, "Fail", "Results",
JOptionPane.PLAIN_MESSAGE);

}else{
JOptionPane.showMessageDialog (
null, "Pass", "Results",
JOptionPane.PLAIN_MESSAGE);
} 
System.exit ( 0 ); 
}
} 

【问题讨论】:

  • Integer.parseInt (firstNumber);传递整数,而不是双精度数
  • 缩进,当我们需要你的时候,你在哪里。
  • 另外,你在哪里忘记了数组?
  • 我认为您需要阅读有关循环的内容。 Oracle website上有很好的介绍。从那里开始并继续阅读。

标签: java


【解决方案1】:

哇,那是 很多 重复。您可能应该使用循环来清理它,例如:

double sum = 0; // initialize variable for sum of all the numbers
for (int i = 1; i <= 10; i ++) { // go from 1 to 10
    String strNum = JOptionPane.showInputDialog("Enter grade #" + i); // prompt for input
    double dNum = Double.parseDouble(strNum); // convert to double
    sum += dNum; // add to sum
}
double avg = sum / 10; // now get the average

【讨论】:

    【解决方案2】:

    number1 = Integer.parseInt ( firstNumber); 期望收到一个“看起来像”整数的字符串,如果你给它一些“看起来像”的东西,你会收到一个错误。你应该改用Double.parseDouble(firstNumber);

    是的,您绝对应该为此使用数组。使用数组可以缩短程序;

    public class UseArrays {
        public static void main(String[] args){
    
            int numberOfEntries=10
    
            double[] numbers =new double[numberOfEntries];
    
            for(int i=0;i< numbers .length;i++){
                String option =
                JOptionPane.showInputDialog ( "Enter Grade " + i );
    
                numbers[i]=Double.parseDouble(option);
            }
    
            double sum=0;
    
            for(int i=0;i< numbers .length;i++){
                sum+=numbers[i];
            }    
    
    
            double average=sum/10;
    
            System.out.println(average);        
    
        }
    }
    

    还请注意,以这种方式创建的程序除了编写时间短得多之外,还可以非常容易地更改条目数。如果您有数百、数千甚至数百万个条目,您不会想手动输入每个条目。

    您可以通过不存储每个双精度然后稍后添加它们来使这个程序更短(这也会使使用数组变得不必要)。这个程序看起来像;

    public class DontUseArrays {
        public static void main(String[] args){
    
            int numberOfEntries=10
            double sum=0;
    
            for(int i=0;i< numberOfEntries;i++){
                String option =
                JOptionPane.showInputDialog ( "Enter Grade " + i );
    
                double number=Double.parseDouble(option);
                sum+=number;
    
            }
    
            double average=sum/10;
    
            System.out.println(average);        
    
        }
    }
    

    【讨论】:

    • 谢谢大家,帮了大忙。我想我应该学会使用数组。就像我说的,虽然只有几天。你们都让它看起来很简单。欢呼
    • @AustinPrince 很高兴为您提供帮助,请注意数组是对数据集合的很好的第一次介绍,您绝对应该学习它们,但是,当您发现自己问“这很棒,但是什么如果我不知道我的数组在开始时应该有多长,我希望它可以增长)查看 ArrayLists
    【解决方案3】:

    这里有一段代码可以帮助你上路:

    public void test() {
      double[] numbers = new double[10];
      double sum = 0;
      for ( int i = 0; i < numbers.length; i++ ) {
        String number = JOptionPane.showInputDialog ( "Enter Grade "+(i+1) );
        numbers[i] = Double.parseDouble(number);
        sum += numbers[i];
      }
    }
    

    【讨论】:

      【解决方案4】:

      如果您必须计算 1000 个分数怎么办?这就是我们使用数组的原因。

      package avgpassorfail;
      
      import javax.swing.JOptionPane;
      
      public class Avgpassorfail 
      {    
          public static void main(String[] args) 
          {
              String[] mumStr = new String[10];
              double sum = 0;                
      
              for (int i = 0; i < numStr.length; i++) //0 to 10 (10 not included)
              {
                  numStr[i] =  JOptionPane.showInputDialog ( "Enter Grade " + (i+1)+ ": " );
                  sum += Double.parseDouble(numStr[i]); 
              }
      
              double avg = sum / numStr.length;
      
              JOptionPane.showMessageDialog (null, "The Average is " + avg, "Results", JOptionPane.PLAIN_MESSAGE);
      
              if (avg < 50)
              {
                  JOptionPane.showMessageDialog (null, "Fail", "Results", JOptionPane.PLAIN_MESSAGE);
              }
              else
              {
                  JOptionPane.showMessageDialog (null, "Pass", "Results", JOptionPane.PLAIN_MESSAGE);
              } 
      
              System.exit ( 0 ); 
          }
      } 
      

      【讨论】:

        【解决方案5】:

        要将您的 Strings 解析为 double 类型,请使用 Double.parseDouble(String s)

        您可以将从Integer.parseInt(String s) 返回的ints 分配给您的double 变量,因为doubles 的精度高于ints,因此类型转换会自动发生,无需显式转换。

        但是,根据定义,您不能使用Integer.parseInt(String s) 将任何带小数点的String 解析为int

        附加点 - 无需声明 String 变量,或为每个数字使用单独的变量 - 使用数组和循环输入数字会更简洁,并且可能将数字相加为他们进来了,比如:

        double[] numbers = new double[10];
        double sum = 0d;
        
        for(int i = 0; i < numbers.length; i++ ) {
            numbers[i] = Double.parseDouble(JOptionPane.showInputDialog ( "Enter 1st Grade" ));
            sum += numbers[i];
        }
        
        double mean = sum / numbers.length;
        

        【讨论】:

          猜你喜欢
          • 2011-07-07
          • 2015-09-13
          • 1970-01-01
          • 1970-01-01
          • 2013-01-11
          • 1970-01-01
          • 1970-01-01
          • 2016-08-27
          • 1970-01-01
          相关资源
          最近更新 更多