gpt4 book ai didi

java - 我的java小程序有什么错误吗?

转载 作者:行者123 更新时间:2023-11-30 08:11:41 27 4
gpt4 key购买 nike

我目前正在上高中编程 1 类,正在完成我的期末项目。我们被允许创建任何我们想要的东西,我决定制作一个程序,其中有吉他琴颈的前 12 个音品,您可以单击音品中的一根弦,它会告诉您它是什么音符以及弹奏什么音符听起来像。我设法让程序告诉我在设置的第一个矩形上选择了什么注释。然后我复制了一堆代码并更改了值以制作其余的音品。但是,当我尝试单击某个音符时,它不再告诉我正在按哪个音符。我的程序构建并执行得很好,没有错误,所以我不太确定该怎么做,我真的可以帮忙。非常感谢您的任何回复!

import java.awt.*;
import java.applet.Applet;

public class Final extends Applet
{
//s6f1 stands for string 6 fret 1
int sf;
Rectangle s6f1, s6f2, s6f3, s6f4, s6f5, s6f6, s6f7, s6f8, s6f9, s6f10, s6f11, s6f12;

public static void main (String[] args)
{

}

public void paint (Graphics g)
{
drawNeck(g);
int x = 690;
int y = 153;
Expo.setColor(g,Expo.red);
Expo.setFont(g,"Arial",Font.BOLD,28);

switch (sf)
{
case 1 :
Expo.drawString(g,"F",x,y);
break;
case 2 :
Expo.drawString(g,"F#/Gb",x,y);
break;
case 3 :
Expo.drawString(g,"G",x,y);
break;
case 4 :
Expo.drawString(g,"G#/Ab",x,y);
break;
case 5 :
Expo.drawString(g,"A",x,y);
break;
case 6 :
Expo.drawString(g,"A#,Bb",x,y);
break;
case 7 :
Expo.drawString(g,"B",x,y);
break;
case 8 :
Expo.drawString(g,"C",x,y);
break;
case 9 :
Expo.drawString(g,"C#/Db",x,y);
break;
case 10 :
Expo.drawString(g,"D",x,y);
break;
case 11 :
Expo.drawString(g,"D#/Eb",x,y);
break;
case 12 :
Expo.drawString(g,"E",x,y);
break;
}


}




public void init()
{
int m = 50;
int n = 10;
//s stands for string, f stands for fret; ex: s6f1 means String 6 Fret 1
s6f1 = new Rectangle (50,198,m,n);
s6f2 = new Rectangle (101,198,m,n);
s6f3 = new Rectangle (151,198,m,n);
s6f4 = new Rectangle (201,198,m,n);
s6f5 = new Rectangle (251,198,m,n);
s6f6 = new Rectangle (301,198,m,n);
s6f7 = new Rectangle (351,198,m,n);
s6f8 = new Rectangle (401,198,m,n);
s6f9 = new Rectangle (451,198,m,n);
s6f10 = new Rectangle (501,198,m,n);
s6f11 = new Rectangle (551,198,m,n);
s6f12 = new Rectangle (601,198,m,n);
sf = 0;
}


public boolean mouseDown(Event e, int x, int y)
{
if(s6f1.inside(x,y))
sf = 1;
if(s6f2.inside(x,y))
sf = 2;
if(s6f3.inside(x,y))
sf = 3;
if(s6f4.inside(x,y))
sf = 4;
if(s6f5.inside(x,y))
sf = 5;
if(s6f6.inside(x,y))
sf = 6;
if(s6f7.inside(x,y))
sf = 7;
if(s6f8.inside(x,y))
sf = 8;
if(s6f9.inside(x,y))
sf = 9;
if(s6f10.inside(x,y))
sf = 10;
if(s6f11.inside(x,y))
sf = 11;
if(s6f12.inside(x,y))
sf = 12;
else
sf = 100;
repaint();
return true;
}

public static void drawNeck (Graphics g)
{
int a = 50;
int b = 225;
int c = 650;
//The Background
Expo.setColor(g,Expo.black);
Expo.fillRectangle(g,0,0,1000,650);
Expo.setColor(g,Expo.lightPink);
Expo.fillRectangle(g,10,10,990,640);
//The neck
Expo.setColor(g,Expo.brown);
Expo.fillRectangle(g,50,50,650,225);
//The frets
Expo.setColor(g,Expo.black);
Expo.drawLine(g,100,a,100,b);
Expo.drawLine(g,150,a,150,b);
Expo.drawLine(g,200,a,200,b);
Expo.drawLine(g,250,a,250,b);
Expo.drawLine(g,300,a,300,b);
Expo.drawLine(g,350,a,350,b);
Expo.drawLine(g,400,a,400,b);
Expo.drawLine(g,450,a,450,b);
Expo.drawLine(g,500,a,500,b);
Expo.drawLine(g,550,a,550,b);
Expo.drawLine(g,600,a,600,b);
Expo.drawLine(g,650,a,650,b);
//The Inlays
Expo.setColor(g,Expo.white);
Expo.fillCircle(g,175,137,10);
Expo.fillCircle(g,275,137,10);
Expo.fillCircle(g,375,137,10);
Expo.fillCircle(g,475,137,10);
Expo.fillCircle(g,625,112,10);
Expo.fillCircle(g,625,163,10);
//The Strings
Expo.setColor(g,Expo.grey);
Expo.fillRectangle(g,a,73,c,77);
Expo.fillRectangle(g,a,98,c,102);
Expo.fillRectangle(g,a,123,c,127);
Expo.fillRectangle(g,a,148,c,152);
Expo.fillRectangle(g,a,173,c,177);
Expo.fillRectangle(g,a,198,c,202);
//String names and Fret numbers
Expo.setColor(g,Expo.blue);
Expo.setFont(g,"Arial",Font.BOLD,14);
Expo.drawString(g,"E",20,210);
Expo.drawString(g,"A",20,180);
Expo.drawString(g,"D",20,155);
Expo.drawString(g,"G",20,130);
Expo.drawString(g,"B",20,105);
Expo.drawString(g,"e",20,75);
Expo.drawString(g,"Note:",680,120);
Expo.setFont(g,"Arial",Font.ITALIC,24);
Expo.drawString(g,"Created by Mitchell",640,635);
//The User-interface
//The Chords area
int t = 150;
Expo.setFont(g,"Arial",Font.BOLD,28);
Expo.drawString(g,"Chords:",800,50);
Expo.setColor(g,Expo.lightBlue);
Expo.fillRectangle(g,700+t,80,740+t,120);
Expo.fillRectangle(g,750+t,80,790+t,120);
Expo.fillRectangle(g,700+t,130,740+t,170);
Expo.fillRectangle(g,750+t,130,790+t,170);
Expo.fillRectangle(g,700+t,180,740+t,220);
Expo.fillRectangle(g,750+t,180,790+t,220);
//The note area
Expo.fillRectangle(g,680,123,745,163);

}

}

附加信息:-我的高中类(class)使用 Expo java 文件作为小程序- 这是我的小程序运行时的样子:http://imgur.com/N86wkkq

最佳答案

问题出在 mouseDown 中的 if 级联。由于您不使用 else if,因此所有 if 语句都会被求值,无论哪一个语句实际产生 true。不是一个大问题,但最后一个 if 有一个 else 部分,每次你不点击 时都会执行该部分s6f12

因此 sf 将始终为 12 或 100。

解决方案:使用else if:

if (s6f1.inside(x,y)) sf = 1;
else if (s6f2.inside(x,y)) sf = 2;
else if (s6f3.inside(x,y)) ...
...
else sf = 100;

关于java - 我的java小程序有什么错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30312813/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com