#java #function
#java #функция
Вопрос:
В настоящее время я работаю над программой о добавлении восьмеричных чисел, и мне нужно использовать целое число.Функция toOctalString() для изменения десятичной дроби на восьмеричную следующим образом: Integer .toOctalString(5 3), которая вернет правильный ответ «10», но для этого одного целого числа.toOctalString(221 2) возвращает не 223, а странный 337? Как я могу это исправить, и вот моя программа. Вот картинка для вопроса, ее трудно объяснить, так что вот она, Спасибо
package first_try;
import java.io.IOException;
import java.util.*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class main {
public static void main(String[] args) throws IOException {
int s, d, r;
Scanner k = new Scanner(System.in);
ArrayList<Integer> data1 = new ArrayList<>(3);
ArrayList<Integer> data2 = new ArrayList<>(3);
ArrayList<Integer> data3 = new ArrayList<>(3);
ArrayList<Integer> data4 = new ArrayList<>(3);
ArrayList<Integer> data5 = new ArrayList<>(3);
for(int i = 0; i < 3; i )
data1.add(k.nextInt());
for(int i = 0; i < 3; i )
data2.add(k.nextInt());
for(int i = 0; i < 3; i )
data3.add(k.nextInt());
for(int i = 0; i < 3; i )
data4.add(k.nextInt());
for(int i = 0; i < 3; i )
data5.add(k.nextInt());
ArrayList<Integer> result = new ArrayList<>(5);
result.add(Calculation(data1.get(0),data1.get(1),data1.get(2)));
result.add(Calculation(data2.get(0),data2.get(1),data2.get(2)));
result.add(Calculation(data3.get(0),data3.get(1),data3.get(2)));
result.add(Calculation(data4.get(0),data4.get(1),data4.get(2)));
result.add(Calculation(data5.get(0),data5.get(1),data5.get(2)));
System.out.println(result);
}
public static int Calculation(int s, int d, int r)
{
int num = r*(1 r)/2;
ArrayList<String> output = new ArrayList<String>(num);
ArrayList<Integer> answer = new ArrayList<Integer>();
int sum = 0;
int number = 0;
for(int i = 0; i < num-1; i )
{
output.add(Integer.toOctalString(s d));
s = d;
}
for(int j = 0; j < r; j )
{
number = Integer.parseInt(output.get((output.size()-1) - j));
while (number > 0) {
answer.add(number%10);
number = number / 10;
}
}
for(int key : answer)
sum = key;
return sum;
}
}
тестовые данные, которые я использую сейчас, это
SAMPLE INPUT: SAMPLE OUTPUT:
2 3 5 1. 36
221 2 4 2. 38
1 4 20 3. 230
10 10 10 4. 99
3245 5 11 5. 178
но результат, который я получил, таков
36
48
230
115
208
Комментарии:
1. 223 в восьмеричном действительно 337. Что не так?
2. Если входные данные должны быть в восьмеричном формате, вам нужно их прочитать
k.nextInt(8)
.3. 221 уже восьмеричное число, что означает 221 2
4. Нет, «221» НЕ ЯВЛЯЕТСЯ «уже восьмеричным»! В коде Java (то, что Abra называет «целочисленными литералами»);
221
: является десятичным «221»;0335
: восьмеричным,0xdd
: шестнадцатеричным. Если вы хотите ввести восьмеричное (основание 8) целое число с помощью Scanner, тогда используйтеscanner.nextInt(8)
, как предложил Кевин Андерсон. Или введите0221
(десятичное число «145»). И, ПОЖАЛУЙСТА , выберите более значимое имя переменной, чем «k», для вашего объекта сканера.
Ответ №1:
Спецификации Java SE содержат ссылки на все версии спецификации языка Java
Обратитесь к разделу о целочисленных литералах, например, в версии Java 8.
221 — десятичный целочисленный литерал, а 0_221 — восьмеричный литерал. Следовательно, ваш java-код интерпретирует 221 как десятичное, а не восьмеричное число.