Вызов метода отображения для массива 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 ответов
На мой взгляд, есть две вещи, которые вы можете сделать:
- Используйте класс
BigInteger
так как он делает именно то, что вы хотите. Измени свой
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();