Строковые массивы и как их зациклить - PullRequest
0 голосов
/ 13 марта 2012

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

 package twoComplement;

public class bintodec {

public static void main (String[] args)throws java.io.IOException {

int number,
    digit1,
    digit2,
    digit3,
    digit4,
    digit5,
    digit6,
    digit7,
    digit8,
    result;

String num = "11100111";

number = Integer.parseInt(num);

digit1 = ((number % 100000000) - (number % 10000000 % 10000000)) / 10000000;
digit2 = ((number % 10000000) - (number % 10000000 % 1000000)) / 1000000;
digit3 = ((number % 1000000) - (number % 1000000 % 100000)) / 100000;
digit4 = ((number % 100000) - (number % 100000 % 10000)) / 10000;
digit5 = ((number % 10000) - (number % 10000 % 1000)) / 1000;
digit6 = ((number % 1000) - (number % 1000 % 100)) / 100;
digit7 = ((number % 100) - (number % 100 % 10)) / 10;
digit8 = (number % 10);

result = (digit1 * -128) + (digit2 * 64) + (digit3 * 32) + (digit4 * 16) + (digit5 * 8) + (digit6 * 4) + (digit7 * 2) + (digit8 * 1);

System.out.println ( "Binary number: " + num + "\nDecimal Number: " + result);
System.out.println();
System.exit( 0 );

}
}

Ответы [ 5 ]

3 голосов
/ 13 марта 2012

Да, в этом и состоит цель loop ;-) advanced для цикла - лучший способ перебора массива. Вы также можете перебирать коллекции (IE: ArrayList), что упрощает добавление новых элементов.

String[] numbersToEvaluate = new String[]{"11100111", "100101", "10101101"};

for (String num: numbersToEvaluate)
{
    number = Integer.parseInt(num);

    digit1 = ((number % 100000000) - (number % 10000000 % 10000000)) / 10000000;
    digit2 = ((number % 10000000) - (number % 10000000 % 1000000)) / 1000000;
    digit3 = ((number % 1000000) - (number % 1000000 % 100000)) / 100000;
    digit4 = ((number % 100000) - (number % 100000 % 10000)) / 10000;
    digit5 = ((number % 10000) - (number % 10000 % 1000)) / 1000;
    digit6 = ((number % 1000) - (number % 1000 % 100)) / 100;
    digit7 = ((number % 100) - (number % 100 % 10)) / 10;
    digit8 = (number % 10);

    result = (digit1 * -128) + (digit2 * 64) + (digit3 * 32) + (digit4 * 16) + (digit5 * 8) + (digit6 * 4) + (digit7 * 2) + (digit8 * 1);

    System.out.println ( "Binary number: " + num + "\nDecimal Number: " + result);
}
1 голос
/ 13 марта 2012

Вы имеете в виду что-то вроде

for (String num : "11100111,1010,11111,110101010101010101011101010101010101010101".split(",")) {
    long result = Long.parseLong(num, 2);
    System.out.println("Binary number: " + num + ", Decimal Number: " + result);
}

печать

Binary number: 11100111, Decimal Number: 231
Binary number: 1010, Decimal Number: 10
Binary number: 11111, Decimal Number: 31
Binary number: 110101010101010101011101010101010101010101, Decimal Number: 3665040856405
1 голос
/ 13 марта 2012

Если вы работаете по крайней мере с Java 5, вы можете использовать конструкцию for-each для зацикливания любого произвольного массива или коллекции.

String[] nums = //init
for (String num:nums) {
    // Do work.
}

Если, однако, вына Java 1.4 или более ранней версии, или вы заботитесь об индексе массива, вам нужно использовать традиционный цикл for

String[] nums = //init
for (int i = 0; i<nums.length; i++) {
    String num = nums[i];
    // Do work.
}
1 голос
/ 13 марта 2012

Это способ определения массива строк:

int n = 10;
String[] arr = new String[n]; 

А вот как перебрать массив:

for (int i = 0; i < n; i++) {
    arr[i] = "element number " + i;
}

или так:

for (String element : arr) {
    System.out.println(element);
}
0 голосов
/ 13 марта 2012

Да, это довольно просто.

String[] array = {"first", "second", "third"};
for (String element : array) {
   // do whatever
}

В качестве отступления, однако, вы можете рассмотреть следующее для более ясного кода:

String num = "1000";
int digit1 = Character.digit(num.charAt(0), 2);
// if you are only expecting a binary number then the second argument (2)
// tells the digit method to throw an error if it gets a digit other than 0 or 1
...

Если это для школыВ упражнении или аналогичном вы можете проверить свой код на встроенном синтаксическом анализаторе Integer.

int numFromBinaryString = Integer.parseInt(numberString, 2);
// again, here the second argument tells parseInt to interpret numberString as
// binary string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...