2013-10-02 5 views
0

Мне нужно использовать разные методы для этого кода, без ярлыков Java! Вот мой код:Печать переменных из разных методов в java?

import java.io.*; 

import java.util.Scanner; 

public class pg3a { 

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

    Scanner keyboard = new Scanner(System.in); 

    String hex; 
    char choice = 'y'; 
    boolean isValid = false; 
    do { 
     switch (choice) { 
    case 'y': 
     System.out.print("Do you want to enter a hexadecimal number? "); 
     System.out.print("y or n?: "); 
     choice = keyboard.next().charAt(0); 

     System.out.print("Enter a hexadecimal number: #"); 
     hex = keyboard.next(); 
     hex = hex.toUpperCase(); 
     int hexLength = hex.length(); 
     isValid = valid(hex); 
     if (isValid) { 
      System.out.println(hex + " is valid and equal to" + convert(hex)); 
     } 
     else { 
      System.out.println(hex + " is invalid."); 
     } 
    case 'n': 
     System.out.println("quit"); 
     } 
     }while (choice != 'n'); 
} 

public static boolean valid (String validString) { 

    int a = 0; 
    if (validString.charAt(0) == '-') { 
    a = 1; 
} 
for (int i=a; i< validString.length(); i++) { 
    if (!((validString.charAt(i) >= 'a' && validString.charAt(i) <= 'f')|| (validString.charAt(i) >= 0 && validString.charAt(i) <= 9))) 
{ 
return false; 
} 
} 
return true; 
} 

Как я могу сделать так, чтобы после того, как программа проверяет все параметры для шестнадцатеричного числа и вычисляет, что он должен быть в десятичной форме, он выводит, что число шестнадцатеричное действует а затем, что такое десятичное число?

Также как я могу сделать цикл, заканчивающийся либо^z, либо^d, чтобы закончить программу?

+1

Должно быть, у вас была очень защищенная жизнь. –

+5

Я уверен, что это не будет последним из ситуации «У меня никогда не было столько проблем на всю жизнь», но ваша проблема довольно проста, чтобы проанализировать содержимое HEx String http://stackoverflow.com/questions/ 11194513/convert-hex-string-to-int, а печать - прямо. –

+0

Это место, где люди помогают людям, которые в беде. Поэтому не нужно снова и снова использовать слова «ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, ПОЖАЛУЙСТА». Человек-ресурс ответит вам даже без этих слов. Старайтесь быть более профессиональными. – Malintha

ответ

0

Для преобразования строк, представляющих шестнадцатеричных чисел в целое число, вы можете использовать Integer.toString(String, int); метод:

Integer parsedValue = Integer.parseInt(hex, 16); 

Первый аргумент является строкой, чтобы быть преобразованы, вторая спецификация Radix, следовательно, это значение 16 для Теперь.

Для завершения Integer.toString (Integer, int) является обратным, если выше: он преобразует значение Integer в строку в указанном радиксе.

Просто создайте метод с именем convert и заставьте его вернуть это.

Печать целого числа не является большой проблемой, вы можете просто связать ее с любой строкой с помощью оператора +.

System.out.println("The value: " + parsedValue); 

Кроме того, имейте в виду, что у вас есть небольшая проблема:

Эта линия делает все charachters верхний регистр в строке:

hex = hex.toUpperCase(); 

Но здесь вы проверяете для строчных букв:

if (!((validString.charAt(i) >= 'a' && validString.charAt(i) <= 'f')|| (validString.charAt(i) >= 0 && validString.charAt(i) <= 9))) 

Либо сделайте hex=hex.toLowerCase();, либо настройте вышеуказанное условие, чтобы проверить между «A» и «F».

Следует упомянуть, что проверка правильности строки String, которую нужно преобразовать в числовое значение, отличается: она включает в себя блок try-catch: попытайтесь преобразовать число, и если оно не выполнено, оно недействительно. .

Integer value; //have to declare it here to be able to access it outside of the try block 
try { 
    value = Integer.parseInt(hex,16); 

} catch(NumberFormatException e) { 
    //if you want to get the stack trace 
    e.printStackTrace(); //if not using a proper logging framework!!! Don't just print it! 
    //handle the situation: e.g. break loop, write eror message, offer retry for user, etc... 
} 
+0

OP сказал, что он не может использовать библиотеки или API для разбора гекса (он назвал их «ярлыками»), потому что это назначение CS. Большая часть вашего ответа недействительна – Bohemian

+0

@Bohemian Хм, это правда. Это требование выходит из этого мира. Я бы это понял, если бы это было для C или ASM, но для Java - давайте ... Было бы гораздо лучше научить бедных ребят, как использовать предоставленные API, и не нужно повторно изобретать колесо снова и снова еще раз. Особенно, что ОП - это искусство ... – ppeterka

+0

На самом деле я полностью согласен с вами: Упражнения должны быть реалистичными и использовать реалистичные решения (java API).Я думаю, что изучение языка * означает * изучение API, но я мог бы понять несколько заданий с использованием «raw» java, чтобы получить заземление на этом языке. Но только очень мало. – Bohemian

Смежные вопросы