2012-03-13 2 views
0

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

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); 

} 
} 

ответ

3

Да, это цель петель ;-) передовые для цикла является лучшим способом для перебора массива. Вы также можете перебирать коллекции (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); 
} 
+0

Работал отлично, спасибо. Я буду отмечать как ответ, когда это возможно. –

1

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

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); 
} 
1

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

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

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

String[] nums = //init 
for (int i = 0; i<nums.length; i++) { 
    String num = nums[i]; 
    // Do work. 
} 
1

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

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 
+0

Встроенное преобразование Integer.parseInt() почти изменяет :) – ggrigery

+1

@ggrigery Это не должно быть проблемой, если это не '[домашняя работа]';) –

0

Да, это довольно легко.

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 
Смежные вопросы