2012-03-24 4 views
0

Мне нужно создать программу, которая добавляет длинные целые числа, не используя класс biginteger.Неверный тип возвращаемого значения в методе

Теперь я работаю над методом add, и я думаю, что у меня это правильно, но я застрял в возврате правильного типа данных для моего метода, и я не уверен, как его исправить.

Вот мои 2 классов до сих пор:

Главного класс:

import java.util.Scanner; 

public class testLargeInteger 
{ 
    public static void main(String[] args) 
    { 
     Scanner input = new Scanner(System.in); 
     String string1; 
     String string2; 
     int exp =0; 


     System.out.print("Enter the first integer: "); 
     //Store up the input string “string1” entered by the user from the keyboard. 
     string1 = input.next(); 

     LargeInteger firstInt = new LargeInteger(string1); 

     System.out.print("Enter the second integer: "); 
     string2 = input.next(); 
     //Store up the input string “string2” entered by the user from the keyboard. 
     LargeInteger secondInt = new LargeInteger(string2); 

     System.out.print("Enter the exponential integer: "); 
     //Store up the input integer “exp” entered by the user from the keyboard. 
     exp = input.nextInt(); 


     LargeInteger sum = firstInt.add(secondInt); 

     System.out.printf ("First integer: %s \n", firstInt.display()); 
     System.out.println("Second integer: " + secondInt.display()); 
     System.out.println(" Exponent: " + exp); 

     System.out.printf (" Sum = %s \n", sum.display()); 

    } 
} 

LargeInteger.class:

public class LargeInteger 
{ 
    private int[] intArray; 

    //convert the strings to array 
    public LargeInteger(String s) 
    { 
     intArray = new int[s.length()]; 
     for (int i = 0; i < s.length(); i++) 
      intArray[i] = Character.digit(s.charAt(i), 10); // in base 10 
    } 

    //display the strings 
    public String display() 
    {   
     String result=""; 

     for (int i = 0; i < intArray.length; i++)  
      result += intArray[i]; 
     return result.toString(); 
    } 

    //get first array 
    public int[] getIntArray() 
    { 
     return intArray; 
    } 

    public LargeInteger add(LargeInteger secondInt) 
    { 
     int[] otherValues = secondInt.getIntArray(); 

     int maxIterations = Math.min(intArray.length, otherValues.length); 
     int currentResult; //to store result 
     int[] resultArray = new int[Math.max(intArray.length, otherValues.length) + 1]; 

     int needToAdd = 0; //to store result should be added next step 

     for(int i = 0; i < maxIterations; i++) 
     { 
      currentResult = intArray[i] + otherValues[i]; 
      resultArray[i] = currentResult % 10 + needToAdd; //if more than 9 its correct answer 
      needToAdd = currentResult/10; //this is what you need to add on next step 
     } 
     resultArray[Math.max(intArray.length, otherValues.length) + 1] = needToAdd; 

     return resultArray; 
    } 
} 

ответ

1

Вам нужен второй LargeInteger конструктор:

public LargeInteger(int[] array) { 
    intArray = array 
} 

Тогда ваш метод может возвращать:

return new LargeInteger(resultArray); 
+0

спасибо, что работает .. Теперь мне нужно, чтобы посмотреть, что случилось с моим массивом .. получает сообщение об Ошибка «ArrayIndexOutOfBoundsException». – Sackling

1

Ну первое дело, ваш метод add в LargeInteger должен вернуться a LargeInteger, но вместо этого возвращает массив (int[]). Вы можете исправить это, добавив конструктор для LargeInteger, который принимает параметр int[] (т. Е. LargeInteger(int[] digitArray)). Затем в вашем методе add вы можете просто сделать: return new LargeInteger(resultArray);.