Java 试图传递字符串,但接收到;空";
这可能是一个简单的错误,我正在仔细查看,但我的问题是,当我试图返回字符串“roman”时,它只返回null。 这是主程序:Java 试图传递字符串,但接收到;空";,java,string,null,return,Java,String,Null,Return,这可能是一个简单的错误,我正在仔细查看,但我的问题是,当我试图返回字符串“roman”时,它只返回null。 这是主程序: /* CCTPG-22 // Assignment 08: Roman Numerals * @author Kevin R. Trujillo * @version 10/28/2015 * Purpose: Converts numbers into roman numerals format and vice-a-versa * Status:
/* CCTPG-22 // Assignment 08: Roman Numerals
* @author Kevin R. Trujillo
* @version 10/28/2015
* Purpose: Converts numbers into roman numerals format and vice-a-versa
* Status:
*/
import java.util.*; // For Scanner
public class RomanMain
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
RomanYear year1 = new RomanYear(1975);
RomanYear year2 = new RomanYear(1988);
RomanYear year3 = new RomanYear(2007);
System.out.println(year1.toString());
System.out.println(year2.toString());
System.out.println(year3.toString());
int diff21 = year2.getYearDecimal() - year1.getYearDecimal();
int diff32 = year3.getYearDecimal() - year2.getYearDecimal();
RomanYear y2MinusY1 = new RomanYear(diff21);
RomanYear y3MinusY2 = new RomanYear(diff32);
System.out.println("Year2 minus Year1 is: " + y2MinusY1.getYearRoman());
System.out.println("Year3 minus Year2 is: " + y3MinusY2.getYearRoman());
}
// Add new methods here
} // No code can be here (outside the class)
这是罗马年的课程:
/**
* Auto Generated Java Class.
*/
public class RomanYear {
private int decimal ;
private String roman ;
public RomanYear() // default constructor
{
decimal = 0 ;
roman = "" ;
}
public RomanYear(int newYear)
{
decimal = newYear ;
roman = setYearDecimal(decimal);
}
public RomanYear(String newYear )
{
roman = newYear ;
decimal = setYearRoman(roman) ;
}
public int setYearRoman(String roman)
{
String romanNumeral = roman.toUpperCase();
for(int x = 0;x < romanNumeral.length(); x++)
{
char convertToDecimal = roman.charAt(x);
// first step: Easy stuff
switch (convertToDecimal)
{
case 'M': decimal += 1000; break;
case 'D': decimal += 500; break;
case 'C': decimal += 100; break;
case 'L': decimal += 50; break;
case 'X': decimal += 10; break;
case 'V': decimal += 5; break;
case 'I': decimal += 1; break;
}
}
// Now adapt for specials
if (romanNumeral.contains("IV"))
{
decimal-=2;
}
if (romanNumeral.contains("IX"))
{
decimal-=2;
}
if (romanNumeral.contains("XL"))
{
decimal-=20;
}
if (romanNumeral.contains("XC"))
{
decimal-=20;
}
if (romanNumeral.contains("CD"))
{
decimal-=200;
}
if (romanNumeral.contains("CM"))
{
decimal-=200;
}
return decimal ;
}
public String setYearDecimal(int yr)
{
if (decimal > 3999)
{
System.out.println("Decimal Number: " + decimal + " is over 3999. ") ;
System.out.println("Please enter a new number") ;
System.out.println("Program is ending.............") ;
try {
Thread.sleep(2000); //5000 milliseconds is one second.
}
catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
System.exit(0) ;
}
else
{
int digit;
String roman = "";
// 1000's column
digit = yr/1000;
for (int i = 0; i < digit; i++)
roman = roman + "M";
yr = yr % 1000; // leaves 0 to 999
// 100s column
String [] hunds = {"", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"};
digit = yr/100;
roman = roman + hunds[digit];
yr = yr % 100; // leaves 0 to 99
// 10s column
String [] tens = {"", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"};
digit = yr/10;
roman = roman + tens[digit];
yr = yr % 10; // leaves 0 to 9
// Ones column
String [] ones = {"", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"};
roman = roman + ones[yr];
}
return roman ;
}
public int getYearDecimal()
{
return decimal ;
}
public String getYearRoman()
{
return roman ;
}
public String toString()
{
System.out.print("Decimal: " + decimal + " as Roman Numerals is " ) ;
return roman ;
}
/* ADD YOUR CODE HERE */
}
/**
*自动生成的Java类。
*/
公共课年{
私有整数十进制;
私人弦罗马;
public-year()//默认构造函数
{
十进制=0;
罗曼=”;
}
公共罗马年(国际新年)
{
十进制=新年;
罗马=setYearDecimal(十进制);
}
公共罗马年(字符串新年)
{
罗马=新年;
十进制=罗马(罗马);
}
public int setYearRoman(字符串罗马)
{
字符串RomanNumeric=roman.toUpperCase();
for(int x=0;x3999)
{
System.out.println(“十进制数:“+Decimal+”大于3999”);
System.out.println(“请输入新号码”);
System.out.println(“程序正在结束……”);
试一试{
sleep(2000);//5000毫秒是一秒钟。
}
捕获(中断异常例外){
Thread.currentThread().interrupt();
}
系统出口(0);
}
其他的
{
整数位数;
字符串罗马=”;
//1000米栏
数字=年/1000;
对于(int i=0;i
如果有人能解释我做错了什么,那将是非常感激的,而不仅仅是张贴“正确的方式”去做
谢谢大家! 在Roman类的顶部创建一个名为Roman的变量
public class RomanYear {
private int decimal ;
private String roman ;
在setYearDecimal中创建一个名为roman的新变量。这个局部变量隐藏了全局变量
int digit;
String roman = "";
当你做roman=roman+M代码>仅更新局部变量。全局的仍然是空的
您只需删除第二个变量前面的String
。在Roman类的顶部创建一个名为Roman的变量
public class RomanYear {
private int decimal ;
private String roman ;
在setYearDecimal中创建一个名为roman的新变量。这个局部变量隐藏了全局变量
int digit;
String roman = "";
当你做roman=roman+M代码>仅更新局部变量。全局的仍然是空的
您只需删除第二个变量前面的String
。告诉我们返回null的特定代码行。告诉我们返回null的特定代码行。这就解决了问题。谢谢你。我知道我只是忽略了一些事情,这就解决了问题。谢谢你。我知道这是我忽略的东西。