Вызов метода отображения для массива int из основного метода

У меня есть один класс LargeInteger:

public class LargeInteger {

    private int[] intArray;

    public LargeInteger(String s) { 

        for (int i = 0; i < s.length(); i++) {
            intArray[i] = Character.digit(s.charAt(i), 10);
        }
    }

    public void display() {

         for (int i = 0; i < intArray.length; i++) {     
                System.out.print(intArray[i]);


            }

        }
}

Надеюсь, что это взяло строку и преобразовало ее в массив int.. Я не уверен, что все сделал правильно, но это еще не мой вопрос.

В моем основном методе я пытаюсь вызвать метод отображения:

Главный:

string1 = input.next(); 
LargeInteger firstInt = new LargeInteger(string1);
System.out.printf ("First integer: %s \n", firstInt.display());

Поскольку мой метод отображения пуст, это не работает, но я не уверен, что заставить его вернуться.. если что? Что я могу сделать?

6 ответов

На мой взгляд, есть две вещи, которые вы можете сделать:

  1. Используйте класс BigInteger так как он делает именно то, что вы хотите.
  2. Измени свой display метод для возврата String - я предлагаю вам использовать StringBuilder для его создания:

    public String display() {
      final StringBuilder result = new StringBuilder();
      for (int i = 0; i < intArray.length; i++) {     
        result.append(intArray[i]);
      }
      return result.toString();
    }
    

Также я бы предложил не вызывать переменную-член intArray поскольку это уже содержится в информации о типе этого. Лучше назови это value или же contents или что-то более связанное с его использованием.

Ваш display Метод печатает значение напрямую. Вместо этого вы хотите построить String а затем верните это.


Я предлагаю вам начать с простого возвращения постоянной строки. Когда это сработает, попробуйте создать строку на лету.

Ну по твоему display() метод у вас есть это:

System.out.print(intArray[i]);

который будет печатать одну цифру.

Вместо этого вы можете изменить метод на:

public String display() {
  StringBuilder number = new StringBuilder();
  for (int i : intArray) {     
    number.append(i);        
  }
  return number.toString();
}

Обратите внимание, что я использовал StringBuilder вместо конкатенации строк. Это дает лучшую производительность для действительно больших чисел, поскольку при простой конкатенации каждая итерация создаст два новых String экземпляры, и это быстро поглотит память и время обработки.

Изменить: Просто исправил опечатку в коде и упростил использование цикла для каждого.

Вам необходимо вернуть строку:

public String display() {           
  String result="";
  for (int i = 0; i < intArray.length; i++) {     
    // create string representation
  }
  return result;
}

Ваш метод отображения должен возвращать строку.

    public String display() {

        String temp = "";
        for (int i = 0; i < intArray.length; i++) {  

             temp = temp + intArray[i].ToString();
        }

        return temp;
    }

Вы отображаете метод на самом деле печатает на экран. Все, что вам нужно сделать, это изменить код на:

string1 = input.next(); 
LargeInteger firstInt = new LargeInteger(string1);
System.out.println ("First integer:");
firstInt.display();
Другие вопросы по тегам