对于练习我必须创建一个包含四个构造函数,两个get方法和三个set方法的类。然后,我必须创建一个程序来测试它。 我的问题是测试程序没有正确读取输入,因为我必须给出输入1"然后输入2/3空格然后输入2"它的工作原理。
此外,两种方法都不起作用。
这是我的测试计划:
import java.util.*;
public class TemperaturaTest {
static Scanner sc = new Scanner (System.in);
public static void main (String args []){
System.out.println("Inserisci i valori di temperatura e la scala (C o F).");
int gradi = sc.nextInt();
sc.nextLine();
String scala = sc.nextLine();
Temperatura temp1 = new Temperatura(gradi, scala);
System.out.println(temp1.getCelsius());
System.out.println(temp1.getFahrenheit());
}
}
这是班级:
import java.util.*;
import java.io.*;
public class Temperatura {
private static double temp;
private static String scala;
//Costruttori
public Temperatura(){
temp=0;
scala="C";
}
public Temperatura(double gradi){
setGradi(gradi);
scala="C";
}
public Temperatura(String scalagradi){
temp=0;
setScala(scalagradi);
}
public Temperatura(double gradi, String scalagradi){
setGradi(gradi);
setScala(scalagradi);
}
//Metodi set
private void setGradi(double gradi){
temp=gradi;
}
private void setScala(String scalagradi){
if (!(scalagradi.equalsIgnoreCase("C") || scalagradi.equalsIgnoreCase("F"))){
System.out.println("Puoi usare solo le lettere C (Celsius) ed F (Fahrenheit) per indicare la temperatura. ");
System.exit(0);
}
scala = scalagradi;
}
private void setTemp(double gradi, String scalagradi){
setGradi(gradi);
setScala(scalagradi);
}
//Metodi get
public double getCelsius(){
if (scala.equalsIgnoreCase("C")){
return temp;
}
return (5*(temp-32)/9);
}
public double getFahrenheit(){
if (scala.equalsIgnoreCase("F")){
return temp;
}
return ((9*(temp)/5)+32);
}
}
如果我使用随机数作为输入,然后在2/3空格,C或F后,程序结束而没有错误(但也没有两个get方法工作)。如果我使用另一个字母(不是C或F),它会给我在setScala()方法中设置的错误,因此输入有效(除了我必须使用空格的事实)
我有这4个构造函数,因为在我开始工作之后,我还必须根据给定的输入测试Java如何自动使用其中一个。
提前感谢您的帮助。
编辑:不知何故,现在它有效。我没有改变原始代码。我将发布新的Test类,因为它现在好一点。请注意,唯一重要的变化是我删除了
sc.nextLine()
现在它可以读取像32 C这样的输入,而不需要将它们写入两个不同的行(就像我之前必须做的那样)。 我不能得到的是为什么这项工作。据我所知,nextInt()会在读取数字后留一个空格,所以当nextLine()读取输入时,它会读取空白区域。现在情况并非如此,我不知道为什么。
工作测试班:
import java.util.*;
public class TemperaturaTest {
static Scanner sc = new Scanner (System.in);
public static void main (String args []){
System.out.println("Inserisci i valori di temperatura e la scala (C o F).");
int gradi = sc.nextInt();
String scala = sc.next().trim();
Temperatura temp1 = new Temperatura(gradi, scala);
System.out.println(temp1.getCelsius() +" gradi Celsius.");
System.out.println(temp1.getFahrenheit()+ " gradi Fahrenheit.");
}
}
答案 0 :(得分:0)
该程序开始工作,没有任何修复。我只是把我的测试程序的主要方法做得更好一些。现在它按预期读取输入(例如“14 C”被正确解释为14摄氏度)。
新测试计划:
import java.util.*;
public class TemperaturaTest {
static Scanner sc = new Scanner (System.in);
public static void main (String args []){
System.out.println("Inserisci i valori di temperatura e la scala (C o F).");
int gradi = sc.nextInt();
String scala = sc.next().trim();
Temperatura temp1 = new Temperatura(gradi, scala);
System.out.println(temp1.getCelsius() +" gradi Celsius.");
System.out.println(temp1.getFahrenheit()+ " gradi Fahrenheit.");
}
}
“Temperatura”类与以前相同:
import java.util.*;
import java.io.*;
public class Temperatura {
private static double temp;
private static String scala;
//Costruttori
public Temperatura(){
temp=0;
scala="C";
}
public Temperatura(double gradi){
setGradi(gradi);
scala="C";
}
public Temperatura(String scalagradi){
temp=0;
setScala(scalagradi);
}
public Temperatura(double gradi, String scalagradi){
setGradi(gradi);
setScala(scalagradi);
}
//Metodi set
private void setGradi(double gradi){
temp=gradi;
}
private void setScala(String scalagradi){
if (!(scalagradi.equalsIgnoreCase("C") || scalagradi.equalsIgnoreCase("F"))){
System.out.println("Puoi usare solo le lettere C (Celsius) ed F (Fahrenheit) per indicare la temperatura. ");
System.exit(0);
}
scala = scalagradi;
}
private void setTemp(double gradi, String scalagradi){
setGradi(gradi);
setScala(scalagradi);
}
//Metodi get
public double getCelsius(){
if (scala.equalsIgnoreCase("C")){
return temp;
}
return (5*(temp-32)/9);
}
public double getFahrenheit(){
if (scala.equalsIgnoreCase("F")){
return temp;
}
return ((9*(temp)/5)+32);
}
}