我正在制作一个理论上应该能够超过正常整数限制的计算器,我现在正在为这个东西设计一个较小的测试版本。我经常需要携带一个像乘法一样的数字,但我一遍又一遍地使用相同的变量,我希望能够清除这些变量,以便在我的计算器中重复使用它们
import java.util.Scanner;
import java.util.LinkedList ;
public class mass_mulitplication_software {
public static void multiply () {
Scanner keyboard = new Scanner (System.in);
//multiplication#1
System.out.println("ones place");
double fnum1 = keyboard.nextDouble() ;
System.out.println("tens place");
double fnum2 = keyboard.nextDouble() ;
System.out.println("hundreds place");
double fnum3 = keyboard.nextDouble() ;
//multiplication#2
System.out.println("ones place");
double snum1 = keyboard.nextDouble() ;
System.out.println("tens place");
double snum2 = keyboard.nextDouble() ;
System.out.println("hundreds place");
double snum3 = keyboard.nextDouble() ;
tnum=fnum1*snum1;
mass_mulitplication_software.carry();
tnum=fnum1*snum2;
mass_mulitplication_software.carry();
tnum=fnum1*snum3;
mass_mulitplication_software.carry();
tnum=fnum2*snum1;
mass_mulitplication_software.carry();
tnum=fnum2*snum2;
mass_mulitplication_software.carry();
tnum=fnum2*snum3;
mass_mulitplication_software.carry();
tnum=fnum3*snum1;
mass_mulitplication_software.carry();
tnum=fnum3*snum2;
mass_mulitplication_software.carry();
tnum=fnum3*snum3;
}
public static double carry(){
if (tnum>10){
double mnum= tnum%10;
double mmnum = tnum- mnum ;
double cnum = mmnum/10 ;
return cnum;}
public static void main(String[] args) {
mass_mulitplication_software.multiply();
} }
另外请考虑我是一个刚刚开始编码的新手编码器,并希望改进我的旧计算器以获取更大的数字这个小版本原型用于倍增你们中的任何人知道如何清除双变量所以它可以使用不同的#
重复使用答案 0 :(得分:0)
您总是可以创建一个菜单,其中包含清除所有数字的选项,选择该选项后,可以使用一种方法将这些变量设置为0.此菜单将包含在主方法中。
看起来你可能想要使用while循环的菜单,所以你可以用不同的值反复重复这个过程。
类似的东西:
int menuChoice = -1;
while (menuChoice < 1 || menuChoice > 8) {
System.out.println();
System.out.println("Menu");
System.out.println("1. Add");
System.out.println("2. Subtract");
System.out.println("3. Multiply");
System.out.println("4. Divide");
System.out.println("5. Power");
System.out.println("6. Logarithm");
System.out.println("7. Clear");
System.out.println("8. Quit");
System.out.println();
System.out.print("What would you like to do? ");
menuChoice = input.nextInt();
if (menuChoice < 1 || menuChoice > 8) {
System.out.println(menuChoice + " wasn't one of the options");
}
}
return menuChoice;
}
这是我正在使用的计算器的菜单。您可以使用if语句根据用户输入的内容执行适当的功能。因此,您可以使用一个菜单选项进行相乘,并让用户在数字的每个变量中输入值。
您实际上不必清除变量 - 执行功能后,菜单会在执行操作后再次显示,因为menuChoice在while循环之前初始化为-1。用户只需选择一个选项并在那些将替换旧值的变量中输入新值。
您可能只想使用unsigned long long int作为变量类型,因为它的范围是0到18,446,744,073,709,551,615。您使用的方法似乎过于复杂。
答案 1 :(得分:0)
正如之前的评论家所说,考虑使用BigInteger或unsigned int。并将每个输入放入自己的变量中,它将使您的生活更轻松,并且您不需要carry()
方法。
除此之外,还有一些事情需要指出,你调用carry()
方法,但对它返回的double不执行任何操作,在这种情况下,tnum
将始终等于{{1 }}
答案 2 :(得分:0)
您可以考虑使用数组来存储变量的数字,而不是尝试保存单个变量中的所有数字。这样,您可以更轻松地在执行carry()
和borrow()
操作时对其进行迭代,因为这些操作可能需要在数字长度上下移动值。
然后,你可以按照你想要的方式进行乘法和除法,使用数组来存储中间值。考虑:
public class Digits {
List<Integer> digits;
public Digits() {
digits = new ArrayList<>();
}
public Digits(Digits other) {
digits = other.getDigits();
}
public List<Integer> getDigits() {
return digits;
}
public Digits times(Digits other) {
List<Integer> newDigits = new ArrayList<>();
for (int i=0; i<other.getDigits().size(); i++) {
for (int j=0; j< digits.size(); j++) {
Integer temp;
try {
temp = newDigits.get(i+j);
} catch (IndexOutOfBoundsException ioobe) {
temp = 0;
}
newDigits.set(i+j, temp + other.getDigits().get(i) * digits.get(j));
}
carry();
}
}
private void carry() {
for (int i=0; i<digits.size(); i++) {
while (digits.get(i) >= 10) {
digits.set(i, digits.get(i) - 10);
digits.set(i+1, digits.get(i+1) + 1);
}
}
}
}