Большой корпус коммутатора (60 различных корпусов) - как мне уменьшить?или уточнить код - PullRequest
0 голосов
/ 01 марта 2019

поэтому у меня есть переключатель, который принимает значение длины стороны (в СМ) и выбирает, как долго вращать колесо робота (в мс), например, пользовательский ввод 25 выбирает случай 25 и устанавливает время на2000ms

, но имея 60 различных возможных случаев (дважды), я не понимаю, как это уменьшить?если это возможно

import java.util.ArrayList;
import java.util.Scanner;
import edu.cmu.ri.createlab.terk.robot.finch.Finch;

public class assignment2 {
    static String shape,largestShapeName;
    static int side1,side2,side3;
    static int triangleCount=0,rectangleCount = 0;
    static int area,largestShape = 0;
    static int largestSide1,largestSide2,largestSide3;
    static int angle1,angle2,angle3;
    static boolean possible=false;
    static Scanner shapescanner = new Scanner(System. in);
    static Scanner sidescanner = new Scanner(System. in);
    static Finch myfinch = new Finch();
    static ArrayList<String> arrayShape = new ArrayList<String>();
    public static void main(String args[])
    {

        System.out.println("Please Enter The shape you want to Draw");

        shape = shapescanner.nextLine().toUpperCase();
        while (!"Q".equals(shape)){

        while (!"Q".equals(shape) && !"R".equals(shape) && !"T".equals(shape) ) {

                System.out.println(shape +" is an incorrect Option Please Enter again");
                shape = shapescanner.nextLine().toUpperCase();
        }
        if ("R".equals(shape)) {
            Rectangle();

        } else if ("T".equals(shape)) {
            Triangle();
        }
        if (area > largestShape) {
            if ("R".equals(shape)) {
                largestSide1=side1;
                largestSide2=side2;
                largestShapeName= "R";
            }else {
                largestSide1=side1;
                largestSide2=side2;
                largestSide3=side3;
                largestShapeName= "T";
            }
            System.out.println("Please Enter The shape you want to Draw");
            shape = shapescanner. nextLine().toUpperCase();
        }else {
        System.out.println("Please Enter The shape you want to Draw");
        shape = shapescanner. nextLine().toUpperCase();
        }
        }
        if ("Q".equals(shape)) {
             for (int i = 0; i < arrayShape.size(); i++) {
                  System.out.println(arrayShape.get(i));
                }
            myfinch.quit();
            System.exit(0);
        }
    }
    public static void Rectangle () {
        int side1time = 0;
        int side2time = 0;

        System.out.println("Please Enter The Length of first side");
        side1 = Integer.parseInt(sidescanner. nextLine());
        while (side1>80 || side1<20) {

            System.out.println(side1 +" is an incorrect Size Please Enter again");
            side1 = Integer.parseInt(sidescanner. nextLine());
    }
        System.out.println("Please Enter The Length of second side");
        side2 = Integer.parseInt(sidescanner. nextLine());
        while (side2>80 || side2<20) {

            System.out.println(side2 +" is an incorrect Size Please Enter again");
            side2 = Integer.parseInt(sidescanner. nextLine());
    }
        switch (side1) {
        case 20:  side2time = 2000 ;
        break;
        case 21:  side2time = 2000 ;
        break;
        case 22:  side1time = 2100 ;
        break;
        case 23:  side1time = 2200 ;
        break;
        case 24:  side1time = 2300 ;
        break;
        case 25:  side1time = 2400 ;
        break;
        case 26:  side1time = 2500 ;
        break;
        case 27:  side1time = 2600 ;
        break;
        case 28:  side1time = 2700 ;
        break;
        case 29:  side1time = 2800 ;
        break;
        case 30:  side1time = 2900 ;
        break;
        case 31:  side1time = 3000 ;
        break;
        case 32:  side1time = 3100 ;
        break;
        case 33:  side1time = 3200 ;
        break;
        case 34:  side1time = 3300 ;
        break;
        case 35:  side1time = 3400 ;
        break;
        case 36:  side1time = 3500 ;
        break;
        case 37:  side1time = 3600 ;
        break;
        case 38:  side1time = 3700 ;
        break;
        case 39:  side1time = 3800 ;
        break;
        case 40:  side1time = 3900 ;
        break;
        case 41:  side1time = 4000 ;
        break;
        case 42:  side1time = 4100 ;
        break;
        case 43:  side1time = 4200 ;
        break;
        case 44:  side1time = 4300 ;
        break;
        case 45:  side1time = 4400 ;
        break;
        case 46:  side1time = 4500 ;
        break;
        case 47:  side1time = 4600 ;
        break;
        case 48:  side1time = 4700 ;
        break;
        case 49:  side1time = 4800 ;
        break;
        case 50:  side1time = 4900 ;
        break;
        case 51:  side1time = 5000 ;
        break;
        case 52:  side1time = 5100 ;
        break;
        case 53:  side1time = 5200 ;
        break;
        case 54:  side1time = 5300 ;
        break;
        case 55:  side1time = 5400 ;
        break;
        case 56:  side1time = 5500 ;
        break;
        case 57:  side1time = 5600 ;
        break;
        case 58:  side1time = 5700 ;
        break;
        case 59:  side1time = 5800 ;
        break;
        case 60:  side1time = 5900 ;
        break;
        case 61:  side1time = 6000 ;
        break;
        case 62:  side1time = 6100 ;
        break;
        case 63:  side1time = 6200 ;
        break;
        case 64:  side1time = 6300 ;
        break;
        case 65:  side1time = 6400 ;
        break;
        case 66:  side1time = 6500 ;
        break;
        case 67:  side1time = 6600 ;
        break;
        case 68:  side1time = 6700 ;
        break;
        case 69:  side1time = 6800 ;
        break;
        case 70:  side1time = 6900 ;
        break;
        case 71:  side1time = 7000 ;
        break;
        case 72:  side1time = 7100 ;
        break;
        case 73:  side1time = 7200 ;
        break;
        case 74:  side1time = 7300 ;
        break;
        case 75:  side1time = 7400 ;
        break;
        case 76:  side1time = 7500 ;
        break;
        case 77:  side1time = 7600 ;
        break;
        case 78:  side1time = 7700 ;
        break;
        case 79:  side1time = 7800 ;
        break;
        case 80:  side1time = 7900 ;
        break;
        }
        switch (side2) {
        case 20:  side2time = 2000 ;
        break;
        case 21:  side2time = 2000 ;
        break;
        case 22:  side2time = 2100 ;
        break;
        case 23:  side2time = 2200 ;
        break;
        case 24:  side2time = 2300 ;
        break;
        case 25:  side2time = 2400 ;
        break;
        case 26:  side2time = 2500 ;
        break;
        case 27:  side2time = 2600 ;
        break;
        case 28:  side2time = 2700 ;
        break;
        case 29:  side2time = 2800 ;
        break;
        case 30:  side2time = 2900 ;
        break;
        case 31:  side2time = 3000 ;
        break;
        case 32:  side2time = 3100 ;
        break;
        case 33:  side2time = 3200 ;
        break;
        case 34:  side2time = 3300 ;
        break;
        case 35:  side2time = 3400 ;
        break;
        case 36:  side2time = 3500 ;
        break;
        case 37:  side2time = 3600 ;
        break;
        case 38:  side2time = 3700 ;
        break;
        case 39:  side2time = 3800 ;
        break;
        case 40:  side2time = 3900 ;
        break;
        case 41:  side2time = 4000 ;
        break;
        case 42:  side2time = 4100 ;
        break;
        case 43:  side2time = 4200 ;
        break;
        case 44:  side2time = 4300 ;
        break;
        case 45:  side2time = 4400 ;
        break;
        case 46:  side2time = 4500 ;
        break;
        case 47:  side2time = 4600 ;
        break;
        case 48:  side2time = 4700 ;
        break;
        case 49:  side2time = 4800 ;
        break;
        case 50:  side2time = 4900 ;
        break;
        case 51:  side2time = 5000 ;
        break;
        case 52:  side2time = 5100 ;
        break;
        case 53:  side2time = 5200 ;
        break;
        case 54:  side2time = 5300 ;
        break;
        case 55:  side2time = 5400 ;
        break;
        case 56:  side2time = 5500 ;
        break;
        case 57:  side2time = 5600 ;
        break;
        case 58:  side2time = 5700 ;
        break;
        case 59:  side2time = 5800 ;
        break;
        case 60:  side2time = 5900 ;
        break;
        case 61:  side2time = 6000 ;
        break;
        case 62:  side2time = 6100 ;
        break;
        case 63:  side2time = 6200 ;
        break;
        case 64:  side2time = 6300 ;
        break;
        case 65:  side2time = 6400 ;
        break;
        case 66:  side2time = 6500 ;
        break;
        case 67:  side2time = 6600 ;
        break;
        case 68:  side2time = 6700 ;
        break;
        case 69:  side2time = 6800 ;
        break;
        case 70:  side2time = 6900 ;
        break;
        case 71:  side2time = 7000 ;
        break;
        case 72:  side2time = 7100 ;
        break;
        case 73:  side2time = 7200 ;
        break;
        case 74:  side2time = 7300 ;
        break;
        case 75:  side2time = 7400 ;
        break;
        case 76:  side2time = 7500 ;
        break;
        case 77:  side2time = 7600 ;
        break;
        case 78:  side2time = 7700 ;
        break;
        case 79:  side2time = 7800 ;
        break;
        case 80:  side2time = 7900 ;
        break;
        }
        myfinch.setLED(0, 255, 0, 2000);
        myfinch.setWheelVelocities(100,100,side1time);
        myfinch.setLED(255, 0, 0, 200);
        myfinch.setWheelVelocities(100,0,2000);
        myfinch.setWheelVelocities(100,100,side2time);
        myfinch.setLED(255, 0, 0, 200);
        myfinch.setWheelVelocities(100,0,2000);
        myfinch.setWheelVelocities(100,100,side1time);
        myfinch.setLED(255, 0, 0, 200);
        myfinch.setWheelVelocities(100,0,2000);
        myfinch.setWheelVelocities(100,100,side2time);
        myfinch.setLED(255, 0, 0, 200);
        myfinch.setLED(0, 0, 0, 200);
        myfinch.setLED(255, 0, 0, 200);
        rectangleCount += 1;
        arrayShape.add(shape + ":" + side1 + "," + side2);
        System.out.println(arrayShape.get(0));
        area = side1 * side2;
    }
    public static void Triangle() {

    }
}

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Если назначаемые значения могут измениться в более поздний момент времени, вы можете заполнить карту парами ключ / значение и использовать ее вместо этого (вы можете поместить эти значения в файл и прочитать их, так что вы не сможетене нужно перекомпилировать класс, если эти значения изменятся):

private final static Map<Integer, Integer> SIDE2TIMEMap = new HashMap<>();

static {
    SIDE2TIMEMap.put(Integer.valueOf(20), Integer.valueOf(2000));
    SIDE2TIMEMap.put(Integer.valueOf(21), Integer.valueOf(2000));
    // [...]
    SIDE2TIMEMap.put(Integer.valueOf(80), Integer.valueOf(7900));
}

Позже вы можете получить значения, подобные этим:

private static int getTimeForSide(int side) {    
    Integer timeVal = SIDE2TIMEMap.get(Integer.valueOf(side));
    if (timeVal == null) {
        timeVal = Integer.valueOf(1000); // default value
        // alternatively: throw new IllegalArgumentException("invalid side: " + side);
    }
    return timeVal.intValue();
}

[...]

    int side1time = getTimeForSide(side1);
    int side2time = getTimeForSide(side2);
0 голосов
/ 01 марта 2019

Ваш switch(side1) кажется эквивалентным:

if (side1 == 20) side2time = 2000;
if (side1 > 20 && side1 <= 80) side2time = (side1 - 1) * 100

То же самое относится и к другому оператору switch.

...