我在Java书中做了一些练习。我对编程很新。因此,请注意(在代码中)我仍然在第一章。现在我已经做了所有事情,我只是想要确认这是否合法,所以我可以随时继续前进。
如果没有,我真诚地感谢不为我做我的代码;我想要建议。
以下是书中提出的问题, “编写一个应用程序,提示/读取分数的分子和分母作为整数,然后打印分数的十进制等值。”
我将用我的代码说明这句话:
我在这里做了修改。这个可以吗?
import java.util.*;
public class ExerciseEleven {
public static void main (String[] args) {
Scanner sc = new Scanner (System.in);
double fraction;
int fractionValue;
int decimal;
double value;
System.out.println("Enter Numerator: ");
int numerator = sc.nextInt();
System.out.println("Enter Denominator: ");
int denominator = sc.nextInt();
fraction = (double) numerator / denominator;
fractionValue = (int) (fraction * 10);
decimal = fractionValue % 10;
value = decimal * 0.1;
System.out.println(value);
}
}
它编译并正常工作。 谢谢。
答案 0 :(得分:10)
它不会执行任何应该说的任务。你读取双打而不是整数,十进制等值不是你打印出来的。 1/2的十进制等值是0.5。你打印5。
另外,您可以注意代码样式:变量名通常用lowerCamelCase编写,如:simpleVariable
。
<强>更新强>
现在它打印出你需要的东西。但是,你不是以正确的方式做到这一点,你的缩进仍然可以改进。
答案 1 :(得分:3)
没关系 (我没有很好地阅读作业,是吗?感谢Vladimir。) ......但有些评论:< / p>
Numerator
)。变量,字段和方法名称应以小写字母开头。现在,您可以自由地忽略标准练习,但如果您这样做,那么人们在阅读您的代码时会遇到很多很多。 : - )Math.round
而不是使用强制转换进行截断。但是这项任务没有说明四舍五入。denominator
为零的情况。所以记住这些:
import java.util.*;
public class ExcerciseEleven {
public static void main (String[] args) {
Scanner sc = new Scanner (System.in);
System.out.println("Enter Numerator: ");
int numerator = sc.nextInt();
System.out.println("Enter Denominator: ");
int denominator = sc.nextInt();
if (denominator == 0) {
System.out.println("Can't divide by zero");
}
else {
double fraction = (double)numerator / denominator;
System.out.println(fraction);
}
}
}
答案 2 :(得分:0)
嘿我正在考虑这个问题,看过这个来源之后我发现了一些有趣的东西,这是我计划实施的算法
ONE_SIXTEENTH = 0.0625
答案 3 :(得分:0)
除法运算包含三个重要部分:
此外,在极少数情况下,当以绝对形式进行比较时,您需要处理Integer.MIN_VALUE
大于Integer.MAX_VALUE
的事实。
例如:-2147483648/-1
以整数类型的形式划分时不能产生2147483648
。原因很简单。结果类型的类型将是整数类型,并且整数类型变量可以容纳的最大正值为+2147483647
为减轻这种情况,我们首先应将分子和分母都转换为长正形式。这为我们提供了答案的积分部分。
两个数字的XOR仅在符号相反的情况下才具有符号1
。这就解决了问题的第一部分(结果的符号)。
对于十进制部分,我们可以采用一般的除法规则,即将余数与10
相乘,然后尝试再次除法并重复。记录我们已经遇到的其余部分,以防止循环进入无界迭代。
public String fractionToDecimal(int A, int B) {
StringBuilder sb = new StringBuilder((A^B) < 0 ? "-" : "");
long a = Math.abs((long)A);
long b = Math.abs((long)B);
sb.append(Long.toString(a/b));
long rem = a % b;
sb.append((rem != 0) ? "." : "");
Map<Long, Integer> remainderMap = new HashMap<>();
int pos = 0;
while (rem != 0){
sb.append(Long.toString((rem*10)/b));
remainderMap.put(rem, pos++);
rem = (rem*10) % b;
if (remainderMap.containsKey(rem)){
String currNum[] = sb.toString().split("\\.");
return currNum[0] + "." + currNum[1].substring(0, remainderMap.get(rem)) +
"(" + currNum[1].substring(remainderMap.get(rem)) + ")";
}
}
if (sb.toString().equals("-0")) return "0";
return sb.toString();
}
样本输出:
2/3
给出0.(6)
-2147483648/-1
给出2147483648