求助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