求助java代码逻辑哪里错了

求助java代码逻辑哪里错了

问题描述:

题目
图片说明

 import java.util.*;
public class Welcome {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner m=new Scanner(System.in);
        int month=m.nextInt();
        if(month<1&&month>12){
            System.out.println("请重新输入1~12之间的整数:");
            Scanner n=new Scanner(System.in);
            month=n.nextInt();
        }
        int date=0;
        switch(month){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                date=31;
                break;
            case 2:
                date=28;
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                date=30;
                break;
        }
        System.out.println(+month+"月份有"+date+"天");
    }
}

输出
图片说明

为什么不是按我的想法走阿,,第一个Scanner读取第一次输入的值——15,15赋值给m变量month,进入if分支,不是应该等我再输入一个数吗。。。怎么直接输出date为0了。所以我想问,哪里出错了,还有,如果要改要怎么改

&&改为||就行,还有最好把if改为while,把if里面的scanner哪行去掉

你把15代入你那个判断,就成了false&&true,结果false,当然不走if里边了,把&&改成||就行了

你的if判断写错了.纠正:if(month12){}

if改成while

import java.util.*;
public class Welcome {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner m=new Scanner(System.in);
    int month=m.nextInt();
    if(month<1||month>12){
        System.out.println("请重新输入1~12之间的整数:");
        Scanner n=new Scanner(System.in);
        month=n.nextInt();
    }else{
    int date=0;
    switch(month){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            date=31;
            break;
        case 2:
            date=28;
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            date=30;
            break;
    }
            }
    System.out.println(+month+"月份有"+date+"天");
}

}

if(month12){
System.out.println("请重新输入1~12之间的整数:");
Scanner n=new Scanner(System.in);
month=n.nextInt();
}
改成:
while(month12){
System.out.println("请重新输入1~12之间的整数:");
Scanner n=new Scanner(System.in);
month=n.nextInt();
}

我按照你的意思,把你的代码稍微做了一点修改,你看看是不是你想要的效果

 public class Welcome {

    public static void main(String[] args) {
        System.out.println("请输入月份:");
        showMonth();
    }

    public static void showMonth() {

        Scanner m = new Scanner(System.in);
        int month = m.nextInt();

        int date = 0;
        switch (month) {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            date = 31;
            System.out.println(+month + "月份有" + date + "天");
            break;
        case 2:
            date = 28;
            System.out.println(+month + "月份有" + date + "天");
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            date = 30;
            System.out.println(+month + "月份有" + date + "天");
            break;
        default:
            System.out.println("输入月份有误,请重新输入1~12之间的整数:");
            showMonth();
            break;
        }

    }
}

图片说明

 //我给你重构了一下,代码整洁优美,易读,便于维护,还用到了java的封装思想
package com.lj.test.other;

import java.util.*;
public class Welcome {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner m=new Scanner(System.in);
int month = -1;
String message = "输入您要查询的月份:";
while(month12){ 
month = askForScanner(message,m);
message = "请重新输入1~12之间的整数:";
}
int date=0;
switch(month){
case 2:
date=28;
break;
case 4:
case 6:
case 9:
case 11:
date=30;
break;
default:
date=31;

   }
   System.out.println(+month+"月份有"+date+"天");
}

private static int askForScanner(String message, Scanner m) {
    // TODO Auto-generated method stub

    System.out.println(message);
    return m.nextInt();
}
}

import java.util.Scanner;

public class T {

static void getMessage(int month){
    int date=0;
    switch(month){
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        date=31;
        break;
    case 2:
        date=28;
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        date=30;
        break;
    }
    System.out.println(+month+"月份有"+date+"天");
}

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    int month = 0;
    while(true){
        month = scanner.nextInt();
        if (month < 1 || month>12) {
            System.out.println("请重新输入1~12之间的整数:");
        }else{
            getMessage(month);
        }
    }
}

}

感觉你代码太繁杂了 个人觉得下面这种写法好很多
package test;

import java.util.Scanner;

/**

  • @author:Avery
  • @description:
  • @date:2017年6月23日 */ public class Test { public static void main(String[] args) { Scanner scan=new Scanner(System.in); int[] month={31,28,31,30,31,30,31,31,30,31,30,31}; int m; do{ System.out.println("请输入月份(1~12):"); m=scan.nextInt(); }while(m12); System.out.println(month[m-1]); } }

这样写会好很多
图片说明

逻辑运算符没法搞清楚,if中的条件永远可不可能成立

switch一般很少用它,感觉上用switch写的代码很low 去看源码 很多东西它都是用数组来实现都不会用switch来实现

谢谢大家,把逻辑与改成逻辑或就可以了,谢谢大家

楼主帮我看下我这个题吧,就是二进制的加法问题,
Description
完成两个8位二进制数累加运算。如果最高位有进位,则加入最后一位。
Input
输入两个8位二进制数
Output
输出二进制数累加和。
Sample Input
10001011 01111100
Sample Output
00001000

步入计算机的小萌新  给的例子不对 10001011 01111100 加后 100000111 取低8位得结果00000111