【问题标题】:Scope Issue, I cannot calculate percentage because of this.范围问题,因此我无法计算百分比。
【发布时间】:2012-06-06 18:34:41
【问题描述】:
import java.util.Random;
import java.util.Scanner; 

public class Carpim {
    Scanner input = new Scanner(System.in); 
    Random myRandom = new Random(); 

    public void determine(){ 



    int trueNumber = 0; 
    int wrongNumber = 0; 
    int total = 0; 
    int answer = 0;

    for (int i = 0; i < 5; ++i){
    int num1 = 1 + myRandom.nextInt(11);
    int num2 = 1 + myRandom.nextInt(11);
    int correctResult = num1 * num2;

    System.out.println( num1 + "*" + num2 + " What is the answer?");
    answer = input.nextInt();

    if (answer == correctResult){ 
        ++trueNumber; 
        ++total;
    }else if (answer != trueNumber){ 
        ++total; 
        ++wrongNumber; 
    }//end if statement

    }//end for loop 

    percentage(total, wrongNumber); 

    }//end method 
    private int percentage(int total, int wrongNumber){ 
        int percentage = (total - wrongNumber)/total; 

        System.out.println(total + " " + wrongNumber + " " + percentage ); 

        return percentage; 
    }//end private method. 

}//End Class

这是我的代码,当我运行此代码时,最后无法计算百分比。但是,它可以计算出 wrongNumber 和总数。你能帮我看看这段代码有什么问题吗?

【问题讨论】:

  • “这不能计算百分比”是什么意思?输出是什么?我猜问题是整数除法。
  • 您的方法百分比是私有的,这使得它无法访问。来自其他班级
  • @Jorge:在同一个班级里,没关系。 private 表示只有这个类可以使用该方法。
  • 不,这不是我想的重点,当我把它公开时,它给了我同样的结果。

标签: java scope


【解决方案1】:

整数除法在java中产生整数而不是浮点数

【讨论】:

    【解决方案2】:

    首先,除以整数将产生整数结果——丢弃数字的小数部分。您可以通过将代码更改为此来解决此问题:

    double percentage = (double)(total - wrongNumber)/total;
    

    ...然后返回double

    另外,您正在丢弃percentage() 的返回值。我不认为您打算这样做,因此您可能希望将其保存在方法内部的某种变量中,然后打印或返回它。

    【讨论】:

      【解决方案3】:

      在您的百分比函数中,您有 int 百分比。整数不能包含小数值和 (total - wrongNumber) / total

      【讨论】:

      • 谢谢,当我把它转换成双倍时,它确实有效。再次感谢。
      【解决方案4】:

      你的私有方法应该注意数据类型:

      private double percentage(int total, int wrongNumber){ 
          double percentage = (double)(total - wrongNumber)/total; 
      
          System.out.println(total + " " + wrongNumber + " " + percentage ); 
      
          return percentage; 
      }//end private method. 
      

      您应该使用浮点数据类型将十进制值保留为 % 值。

      如果您想要快速将百分比精确到小数点后 2 位,您可以这样做:

      double percentage = 56.4332893723;
      percentage = ((int)(percentage*100))/100.0;    // instant 2-decimal conversion
      

      【讨论】:

      • 即使我把它公开,同样的结果在控制台中。
      • 公开并不能解决问题。问题在于您使用的数据类型。请注意,我用于百分比的数据类型是 double 而不是 int。
      • int 只能存储整数,因此您的百分比的十进制值被“截断”。您必须使用双精度或浮点数据类型来保留十进制值。
      猜你喜欢
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多