【问题标题】:Printing out variables from different methods in java?从java中的不同方法打印出变量?
【发布时间】:2013-10-08 11:08:08
【问题描述】:

我必须对这段代码使用不同的方法,没有 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 结尾的循环来结束程序?

【问题讨论】:

  • 你一定过着非常隐蔽的生活。
  • 我确定这不会是“我这辈子从来没有遇到过这么多麻烦”的最后一个情况,但是你的问题很简单,解析 HEx 字符串 stackoverflow.com/questions/11194513/convert-hex-string-to-int 的内容,并且打印很简单。
  • 这是一个人们帮助任何有困难的人的地方。所以没有必要一次又一次地使用“PLEASE PLEASE PLEASE”之类的词。即使没有这些话,资源人员也会回答你。尝试更专业。

标签: java methods printing return hex


【解决方案1】:

要将表示十六进制数的字符串转换为整数,可以使用Integer.toString(String, int);方法:

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

第一个参数是要转换的字符串,第二个是基数规范,因此这个值现在是 16。

完整地说,Integer.toString(Integer, int) 与上述相反:它将整数值转换为指定基数的字符串。

只需创建一个名为 convert 的方法,并使其返回 this。

打印一个整数不是什么大问题,您可以使用 + 运算符将它连接到任何字符串。

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

另外,请记住,您有一个小问题:

这一行将字符串中的所有字符变为大写:

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'之间。

不得不提一下,虽然检查字符串的有效性而不是转换为数值是不同的:它涉及一个 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...
}

【讨论】:

  • OP 说他不能使用库或 API 来解析十六进制(他称它们为“快捷方式”),因为这是一个 CS 作业。你的大部分答案都不适用
  • @Bohemian 嗯,这是真的。这个要求是不存在的。如果它是用于 C 或 ASM,我会理解它,但对于 Java - 来吧......教穷人如何使用提供的 API 而不必一遍又一遍地重新发明轮子会更有意义再次。尤其是 OP 是艺术专业...
  • 其实我完全同意你的观点:练习应该是现实的,并使用现实的解决方案(java API)。我认为学习语言意味着学习 API,但我可以理解一些使用“原始”java 的作业来获得语言的基础。但只有极少数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 2021-04-16
  • 2012-10-21
  • 1970-01-01
相关资源
最近更新 更多