输入读取和获取方法不起作用

时间:2018-01-23 10:52:15

标签: java class

对于练习我必须创建一个包含四个构造函数,两个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.");
    }
}

1 个答案:

答案 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);
        }
    }