Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从整数生成十六进制值_Java - Fatal编程技术网

Java 从整数生成十六进制值

Java 从整数生成十六进制值,java,Java,我试图从整数输入生成十六进制颜色值,但我不确定是否正确使用了concat方法。当我输出字符串颜色时,我只得到“0x”,有什么想法吗 public String generateColor(String redVal, String blueVal, String greenVal, String alphaVal){ String theColor = "0x"; theColor.concat(alphaVal); theColor.concat(r

我试图从整数输入生成十六进制颜色值,但我不确定是否正确使用了concat方法。当我输出字符串颜色时,我只得到“0x”,有什么想法吗

public String generateColor(String redVal, String blueVal, 
  String greenVal, String alphaVal){
      String theColor = "0x";

      theColor.concat(alphaVal);
      theColor.concat(redVal);
      theColor.concat(greenVal);
      theColor.concat(blueVal);

      return theColor;
}  

您需要将其重新分配给theColor,因为concat()方法返回一个带有连接的字符串


您需要将其重新分配给theColor,因为concat()方法返回一个带有连接的字符串


字符串的
concat
不会修改原始字符串(字符串是Java格式的)。我建议在这里使用
StringBuilder

public String generateColor(String redVal, String blueVal, String greenVal, String alphaVal) {
    StringBuilder theColor = new StringBuilder("0x")
            .append(alphaVal)
            .append(redVal)
            .append(greenVal)
            .append(blueVal);
    return theColor.toString();
}

字符串的
concat
不会修改原始字符串(字符串是Java格式的)。我建议在这里使用
StringBuilder

public String generateColor(String redVal, String blueVal, String greenVal, String alphaVal) {
    StringBuilder theColor = new StringBuilder("0x")
            .append(alphaVal)
            .append(redVal)
            .append(greenVal)
            .append(blueVal);
    return theColor.toString();
}

java中的字符串对象是不可变的,即像
concat
这样的操作不会修改原始对象,而是创建新对象。您需要修改代码以将修改后的值指定给颜色:

theColor = theColor.concat(alphaVal);

java中的字符串对象是不可变的,即像
concat
这样的操作不会修改原始对象,而是创建新对象。您需要修改代码以将修改后的值指定给颜色:

theColor = theColor.concat(alphaVal);

如果您的输入字符串都是两个十六进制数字的两个字符字符串,那么您可以非常简单地生成所需的字符串:

 public String generateColor(String redVal, String blueVal, 
                             String greenVal, String alphaVal) {
     return "0x" + alphaVal + redVal + greenVal + blueVal;
 } 
无需在
StringBuilder
concat
上胡闹

如果输入字符串是从整数转换而来的,因此您不能确定它们是否是两个十六进制数字,那么上述方法将不起作用。但是使用
concat
StringBuilder
append
的解决方案也不起作用,因为它们基本上与
+
做相同的事情——它们只是将所有字符串连接在一起

要问的第一个问题是,您是否过早地将整数转换为字符串?如果将整数转换为字符串,然后将字符串作为参数传递给
generateColor
,然后担心字符串的格式不正确,那么实际上应该将整数传递给
generateColor
,而不是字符串,并让
generateColor
将它们转换为所需的字符串类型。有几种方法可以做到这一点;这里有一个:

 public String generateColor(int redVal, int blueVal, 
                             int greenVal, int alphaVal) {
     return String.format("0x%02x%02x%02x%02x", alphaVal & 0xFF,
         redVal & 0xFF, greenVal & 0xFF, blueVal & 0xFF);
 } 
%02x
要求将下一个参数的格式设置为十六进制(
x
),并将其转换为2个字符宽的字符串(
2
),如果值只有一个十六进制数字(
0
),则用前导零代替空格填充。如果整数值太大,无法容纳两位数字,
格式
将在字符串中包含三个或更多字符,这就是为什么我在每个整数上使用
&0xFF
,以确保值不会太大<代码>%02x不在前面放置一个
0x
。格式字符串有自己的
0x
,用于将这两个字符放入结果中。(如果需要,可以使用
%02X
而不是
%02X
,这会导致十六进制数字A-F以大写形式出现。)


还有其他方法:您可以使用
&
|
从四个输入整数创建一个
int
,如果您的输入字符串都是两个十六进制数字的两个字符字符串,那么您只需生成所需的字符串:

 public String generateColor(String redVal, String blueVal, 
                             String greenVal, String alphaVal) {
     return "0x" + alphaVal + redVal + greenVal + blueVal;
 } 
无需在
StringBuilder
concat
上胡闹

如果输入字符串是从整数转换而来的,因此您不能确定它们是否是两个十六进制数字,那么上述方法将不起作用。但是使用
concat
StringBuilder
append
的解决方案也不起作用,因为它们基本上与
+
做相同的事情——它们只是将所有字符串连接在一起

要问的第一个问题是,您是否过早地将整数转换为字符串?如果将整数转换为字符串,然后将字符串作为参数传递给
generateColor
,然后担心字符串的格式不正确,那么实际上应该将整数传递给
generateColor
,而不是字符串,并让
generateColor
将它们转换为所需的字符串类型。有几种方法可以做到这一点;这里有一个:

 public String generateColor(int redVal, int blueVal, 
                             int greenVal, int alphaVal) {
     return String.format("0x%02x%02x%02x%02x", alphaVal & 0xFF,
         redVal & 0xFF, greenVal & 0xFF, blueVal & 0xFF);
 } 
%02x
要求将下一个参数的格式设置为十六进制(
x
),并将其转换为2个字符宽的字符串(
2
),如果值只有一个十六进制数字(
0
),则用前导零代替空格填充。如果整数值太大,无法容纳两位数字,
格式
将在字符串中包含三个或更多字符,这就是为什么我在每个整数上使用
&0xFF
,以确保值不会太大<代码>%02x
不在前面放置一个
0x
。格式字符串有自己的
0x
,用于将这两个字符放入结果中。(如果需要,可以使用
%02X
而不是
%02X
,这会导致十六进制数字A-F以大写形式出现。)


还有其他方法:您可以使用
&
|
从四个输入整数创建一个
int
,我知道您在这里要做什么,但是如果您有一个Java
Color
类,您可以调用
getRGB()
,然后将整数转换为单个值。在Java
中,String
对象是不可变的。@markspace在这里有最好的解决方案。我知道您在这里要做什么,但是如果您有Java
Color
类,您可以调用
getRGB()
,然后将整数转换为单个值。在Java中,String
对象是不可变的。@markspace有最好的解决方案就是这样,我正在将它们从integer->hex转换。因此,它们可能并不总是两位数。我现在想知道如何强制它们是2位数。那么,所有的