【问题标题】:"type mismatch: cannot convert from int to byte" [closed]“类型不匹配:无法从 int 转换为字节” [关闭]
【发布时间】:2020-07-11 16:36:41
【问题描述】:

Java 新手,到目前为止一直在苦苦挣扎。昨天尝试了一整天来修复此错误,但无济于事...任何帮助将不胜感激。

import java.util.Random;
import java.util.Date;
class Proj06{
  public static void main(String[] args){
    Random generator = null;
    if(args.length != 0){
      generator = new Random(Long.parseLong(args[0]));
    }else{
      generator = new Random(new Date().getTime());
    };
    
    //Get and save positive random number of type int.
    int valA = Math.abs((generator.nextInt()))/67000 + 1024;
    
    Proj06Runner obj = new Proj06Runner();

    String valB = obj.run("certificaton");
    String valC = obj.run(1,"name");
    byte valD =   obj.run(valA);

    //Print the original random integer
    System.out.println(valA);
    
    //Print the three values returned from the three calls
    // to the run method.
    System.out.println(valB);
    System.out.println(valC);
    System.out.println(valD);
    
    //Print the original random integer after casting it
    // down to type byte.
    //System.out.println((byte)valA);

  }//end main

public class Proj06Runner extends Proj06{
  public int run(int valA){
    return valA;
  }
  public String run(String valB){
    return "this works";
  }
  public String run(int i, String valC){
    return "this also works";
  }
//this does not work 
  public byte run(byte valD){
    return valD;
  }

}

我无法更改 main 中的任何内容..我知道 valA 是 int 的方式存在错误,但我将其分配给字节变量

【问题讨论】:

  • 错误信息你不明白吗?您无法将 int 转换为 byte。但是您尝试一下,例如在byte valD = obj.run(valA); 中,编译器说“不”。
  • 很清楚,但我不知道如何解决它
  • valD 应该是int
  • 我的教授写了主要代码,我无法更改字节 valD = obj.run(valA);
  • 那么run (int valA) 应该返回一个byte。请你的教授再给你解释一下

标签: java casting int byte overloading


【解决方案1】:

您的 Proj06Runner 类有以下两种方法:

  public int run(int valA){
    return valA;
  }
  public byte run(byte valD){
    return valD;
  }

第一个接受int 并返回int。第二个接受byte 并返回byte。你打电话给第一个。我怀疑您希望调用第二个,但这不起作用,因为 main 方法将 int 作为参数传递。

修复编译器错误的一种方法是将这两种方法“合并”为一个方法,该方法采用int 并返回byte。例如:

  public byte run(int valD){
    return (byte) valD;
  }

【讨论】:

  • 谢谢你的好意。我最初尝试过,但我保留了第一种方法,由于重复的方法,它不起作用,但是一旦我删除了第一种方法,它就起作用了。谢谢
猜你喜欢
  • 2011-12-27
  • 2020-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-08
  • 1970-01-01
相关资源
最近更新 更多